#Private attribute example
class C {
has $!w; #private attribute
multi method w { $!w } #getter method
multi method w ( $_ ) { #setter method
warn “Don’t go changing my w!”; #some side action
$!w = $_
}
}
my $c = C.new
$c.w( 42 )
say $c.w #prints 42
$c.w: 43
say $c.w #prints 43
#but not
$c.w = 44
Cannot modify an immutable Int (43)
到目前为止,如此合理,然后
#Public attribute example
class C {
has $.v is rw #public attribute with automatic accessors
}
my $c = C.new
$c.v = 42
say $c.v #prints 42
#but not
$c.v( 43 ) #or $c.v: 43
Too many positionals passed; expected 1 argument but got 2
我喜欢'='赋值的即时性,但是我需要轻松捆绑多种方法提供的副作用。我知道这是两个不同的世界,并且它们不会混合在一起。
但是-我不明白为什么我不能只去$ cv(43)设置公共属性
- 我觉得raku指导我不要混合使用这两种模式-有些属性是私有的,有些是公共的,压力是方法方法(有些是来自结肠的糖)-这是Raku设计的意图吗?
- 我想念什么吗?
is rw
指定访问器时,它已经返回了一个容器。返回代理不会更改访问器上允许的参数数量。
= foo
和.(foo)
设置)和启用的副作用在两种情况下做(但不是唯一时获取):tio.run/...