私有属性默认是由.perl和.gist隐藏的

jjm*_*elo 6 oop perl6

情况似乎是这样的:

class Foo { has $!bar }; say Foo.new( :3bar ).perl # OUTPUT: «Foo.new?» 
Run Code Online (Sandbox Code Playgroud)

文档说它依赖于实现,但我想知道这是否真的有意义.

Eli*_*sen 10

.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
Run Code Online (Sandbox Code Playgroud)

默认忽略命名参数:3bar(aka bar => 3),因为没有名称的公共属性bar.

如果你想让它抱怨这种情况,那么https://modules.perl6.org/dist/StrictNamedArguments可能适合你.