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-booksTrue예요.

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.