#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
「=」割り当ての即時性が好きですが、マルチメソッドが提供するサイドアクションを簡単にまとめることが必要です。これらは2つの異なる世界であり、混ざらないことを理解しています。
しかし-私はなぜ$ cv(43)に行けないのか理解していませんpublic属性を設定するには
- 楽はこれらの2つのモードを混合しないように私を誘導しているように感じます-一部の属性はプライベートと一部の属性であり、プレッシャーはメソッドメソッドに向けられています(いくつかはコロンからの砂糖です)-これはラクのデザインの意図ですか?
- 何か不足していますか?
is rw
が指定されている場合、アクセサーは既にコンテナーを返します。プロキシを返すことで、アクセサで許可されるパラメータの数が変更されることはありません。
= foo
し、.(foo)
設定のための)と、両方のケースで行う必要が副作用を有効にする(ただし、場合にのみフェッチ):tio.run/...