如何在perl6中从数组或散列创建方法
发布时间:2020-12-16 06:28:47 所属栏目:大数据 来源:网络整理
导读:我试图动态地向对象添加新方法. 以下代码工作正常: use SomeClass;my $obj = SomeClass.new;my $blah = 'ping';my $coderef = method { say 'pong'; }$obj.^add_method($blah,$coderef);$obj.ping; 这会按预期打
我试图动态地向对象添加新方法.
以下代码工作正常: 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. 任何人都可以解释我错过了什么,或者为什么结果与我的期望不同? 解决方法
Rakudo有一些问题意外地过度分享词汇变量,这可能导致你的问题(代码引用关闭$v).使用Rakudo的当前开发版本(因此在下一个版本中,以及在“Rakudo Star”版本中),此代码可用:
class SomeClass { }; my $obj = SomeClass.new; my %hash = one => 1,$v { my $coderef = method { say $v; } $obj.^add_method($k,$coderef); } $obj.one; $obj.two; $obj.three; 输出: 1 2 3 请注意,不允许使用方法名称和括号之间的空格. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |