加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在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

请注意,不允许使用方法名称和括号之间的空格.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读