我正在尝试使用多个调度来重载和使用组合类中的方法。这是实现:
role A {
has $!b;
submethod BUILD( :$!b ) {}
multi method bar () {
return $!b;
}
}
class B does A {
submethod BUILD( :$!b ) {}
multi method bar() {
return " * " ~ callsame ~ " * ";
}
}
my $a = A.new( b => 33);
say $a.bar();
my $b = B.new( b => 33 );
say $b.bar();
但是,这失败了:
Calling callsame(Str) will never work with declared signature ()
(我真的不知道为什么 callameStr
用作签名)。更改method bar
使用callwith
:
multi method bar() {
return " * " ~ callwith() ~ " * ";
}
根本不起作用:
Use of Nil in string context
in method bar at multi.p6 line 18
* *
call*
在角色/类中是否有任何特殊的工作方式?