如何在perl6中从数组或散列创建方法

前端之家收集整理的这篇文章主要介绍了如何在perl6中从数组或散列创建方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图动态地向对象添加方法.

以下代码工作正常:

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

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

猜你在找的Perl相关文章