#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) public 속성을 설정하려면
- raku는이 두 가지 모드를 혼합하지 말라고 지시합니다. 일부 속성은 개인 속성과 일부 속성은 압력이 방법 방법에 대한 압력입니다 (일부 : 결장의 설탕)-이것이 Raku 디자인의 의도입니까?
- 뭔가 빠졌습니까?
is rw
지정 되면 컨테이너를 이미 반환한다는 의미 입니다. 프록시를 반환해도 접근 자의 허용 가능한 매개 변수 수는 변경되지 않습니다.
= foo
하고 .(foo)
설정하기 위해) 작동하고 부작용이 두 경우 모두에서 수행되도록하는 것 같습니다 (가져올 때만는