默认情况下,.perl和.gist隐藏私有属性吗

时间:2019-02-26 13:29:44

标签: oop perl6

似乎是这样:

class Foo { has $!bar }; say Foo.new( :3bar ).perl # OUTPUT: «Foo.new␤» 

文档说it's implementation dependent,但我想知道这是否真的有意义。

1 个答案:

答案 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也许适合您。