这有点意外的行为,可能会咬人初学者.首先,这是打算吗?其次,Perl 6使用什么来猜测要创建哪个对象?它是否开始认为它是Block或Hash并稍后更改,还是最终决定?
你可以用大括号和胖箭头构造一个哈希:
my $color-name-to-rgb = {
'red' => 'FF0000',
};
put $color-name-to-rgb.^name; # Hash
Run Code Online (Sandbox Code Playgroud)
使用另一个Pair符号也会创建哈希.
my $color-name-to-rgb = {
:red('FF0000'),
};
Run Code Online (Sandbox Code Playgroud)
但是,如果没有胖箭,我会得到一个Block:
my $color-name-to-rgb = {
'red', 'FF0000',
};
put $color-name-to-rgb.^name; # Block
Run Code Online (Sandbox Code Playgroud)
还有其他方法来定义哈希,但我问的是这个特定的语法,而不是寻找我已经知道的解决方法.
$ perl6 -v
This is Rakudo version 2017.04.3 built on MoarVM version 2017.04-53-g66c6dda
implementing Perl 6.c.
Run Code Online (Sandbox Code Playgroud) 此线程中给出的代码不再起作用:如何在 Perl 6 中重新启用对象?
我去年写了这段代码,然后它就起作用了。现在它没有:
class Person { ; }
class Woman is Person { ; }
my $tom = Person.new;
my $lisa = Woman.new;
say $tom.^name; # -> Person
say $lisa.^name; # -> Woman
Metamodel::Primitives.rebless($tom, Woman);
# -> New type Woman for Person is not a mixin type
Run Code Online (Sandbox Code Playgroud)
错误消息没有意义,因为它应该与继承的类一起使用。至少是这样。