You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl中作为类属性的类实例如何访问所属类实例的属性?

解决方案:类A访问所属类B的bar属性及反向访问

当前代码中类B持有类A的实例,但类A没有指向所属B实例的引用,因此无法直接访问B的bar属性。要实现需求,需给A添加指向B的引用,并在创建A实例时传入B的自身实例。

修改后的代码示例

class A {
    has $.foo = 1;
    has B $.owner;  # 添加存储所属B实例的属性

    # 在A内部获取B的bar属性
    method get-owner-bar {
        return $!owner.bar;
    }
}

class B {
    has $.bar = 2;
    has A $.a;
    submethod TWEAK {
        $!a = A.new(owner => self);  # 创建A时传入B自身实例
    }
}

my $b = B.new;
say $b;    # B.new(bar => 2, a => A.new(foo => 1, owner => B.new(bar => 2, a => ...)))
say $b.a.get-owner-bar;  # 输出2

my $test := $b.a;
say $test.owner.bar;     # 输出2,从A实例反向获取对应B的bar值

关键说明

  • 给类A添加has B $.owner属性,用于保存所属的B实例引用。
  • 在B的TWEAK方法中创建A实例时,通过self将B自身传递给A的owner参数,建立双向关联。
  • 类A内部可通过$!owner.bar直接访问B的bar属性;外部持有A实例(如$test)时,通过$test.owner.bar即可获取对应B实例的bar值。

内容的提问来源于stack exchange,提问作者Jim Bollinger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 15:54:43