我正在尝试向对象动态添加新方法。
以下代码可以正常工作:
use SomeClass;
my $obj = SomeClass.new;
my $blah = 'ping';
my $coderef = method { say 'pong'; }
$obj.^add_method($blah, $coderef);
$obj.ping;
这会按预期打印“pong”,而以下内容将无法按预期工作:
use SomeClass;
my $obj = SomeClass.new;
my %hash = one => 1, two => 2, three => 3;
for %hash.kv -> $k, $v {
my $coderef = method { print $v; }
$obj.^add_method($k, $coderef);
}
$obj.one;
$obj.two;
$obj.three;
将打印 111 或 333。
谁能解释我缺少什么或为什么结果与我的预期不同?