Raku의 rw — '쓰기 가능' 여부를 확인하는 곳들
Raku의 rw — '쓰기 가능' 여부를 확인하는 곳들
rw라는 이름은 Raku 곳곳에서 '쓰기 가능(writable)'을 뜻해요. '지금 꺼낸 이 값이나 속성이 실제로 바꿀 수 있는 것인지'를 확인하고 싶을 때, 각 타입마다 저마다의 rw 메서드가 존재해요. 어떤 곳들이 있는지 하나씩 볼게요.
IO::Path — 존재하고 읽고 쓸 수 있는 경로인가
method rw(IO::Path:D: --> Bool:D)
호출자가 존재하고 읽기·쓰기 가능한 경로라면 True를 돌려줘요. 경로가 존재하지 않는 파일시스템 개체를 가리키면 X::IO::DoesNotExist로 실패해요.
Metamodel::AttributeContainer — 기본으로 쓰기 가능한 속성인가
method rw($obj)
이 객체에 set_rw가 호출된 적이 있다면, 즉 새 공개 속성이 기본적으로 쓰기 가능하도록 설정됐다면 참 값을 돌려줘요.
Attribute — 'is rw' 트레잇이 붙은 속성인가
method rw(Attribute:D: --> Bool:D)
is rw 트레잇이 적용된 속성에 대해 True를 돌려줘요.
class Library {
has $.address; # Read-only value
has @.new-books is rw;
}
my $addr = Library.^attributes(:local)[0];
my $new-books = Library.^attributes(:local)[1];
say $addr.rw; # OUTPUT: «False»
say $new-books.rw; # OUTPUT: «True»
$.address는 기본적으로 읽기 전용이라 False, is rw가 붙은 @.new-books는 True예요.
Parameter — is rw 시그너처 파라미터인가
method rw(Parameter:D: --> Bool:D)
is rw 파라미터라면 True를 돌려줘요.
my Signature $sig = :(Str $x is rw, Bool :$is-named);
say $sig.params[0].rw; # OUTPUT: «True»
say $sig.params[1].rw; # OUTPUT: «False»
출처: Raku 공식 문서 — rw
본문
IO::Path.rw: 경로가 존재하고 읽고 쓸 수 있으면True. 존재하지 않으면X::IO::DoesNotExist.Metamodel::AttributeContainer.rw:set_rw가 호출됐으면 참.Attribute.rw:is rw트레잇이 붙은 속성이면True.Parameter.rw:is rw파라미터라면True.