似乎是这样:
class Foo { has $!bar }; say Foo.new( :3bar ).perl # OUTPUT: «Foo.new»
文档说it's implementation dependent,但我想知道这是否真的有意义。
答案 0 :(得分:9)
.perl
输出正确。 Foo.new( :3bar )
不会不按照您的想法做。如果您添加method bar() { $!bar }
,则会注意到私有属性$!bar
并未未设置:
class Foo {
has $!bar;
method bar() { $!bar }
}
say Foo.new( :3bar ).bar; # (Any)
say Foo.new( :3bar ).perl; # Foo.new
由于没有没有公共属性,名称为:3bar
,所以无提示地忽略了命名参数bar => 3
(又名bar
)。
如果您希望它抱怨这种情况,那么https://modules.perl6.org/dist/StrictNamedArguments也许适合您。