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
相关产品推荐
相关产品推荐

