Raku의 AT-KEY — 해시 첨자(`{}`)가 읽는 값

Raku의 AT-KEY — 해시 첨자({})가 읽는 값

%hash<key>처럼 해시에 중괄호 첨자를 쓰면, Raku는 내부적으로 AT-KEY 메서드를 호출해요. 직접 클래스를 만들어 해시처럼 동작하게 하고 싶다면, 이 메서드를 구현해서 '키로 값 읽기' 동작을 정의할 수 있어요.

Associative 역할 — 기본 정의

method AT-KEY(\key)

주어진 키에 있는 값/컨테이너를 돌려줘야 해요. 가장 단순한 형태는 그냥 상수를 돌려주는 것도 가능해요.

class What {
    method AT-KEY(\key) { 42 }
};
say What.new{33};  # OUTPUT: «42␤»

Subscripts — mutable한 요소를 만들 때

multi method AT-KEY(::?CLASS:D: $key)

$key에 연결된 요소를 돌려주는 게 기대 동작이에요. postcircumfix { }이 보통 이 메서드를 호출해요.

요소를 변경 가능(mutable)하게 만들고 싶다면(내장 Hash 타입처럼), 읽을 땐 요소 값으로 평가되고 대입할 땐 값을 갱신하는 아이템 컨테이너(item container) 형태로 돌려줘야 해요. 그러려면 return-rw 또는 is rw 루틴 트레잇을 써야 해요. 반면 컬렉션을 읽기 전용으로 만들고 싶다면, 컨테이너가 아닌 값을 직접 돌려줘도 돼요.

출처: Raku 공식 문서 — AT-KEY

본문

  • %hash<key>의 중괄호 첨자가 호출하는 메서드로, 키에 연결된 값을 돌려줘요.
  • Associative 역할에 기본 시그너처 method AT-KEY(\key)가 정의돼 있어 커스텀 클래스에서 구현할 수 있어요.
  • 변경 가능한 요소를 원하면 return-rwis rw로 아이템 컨테이너를 돌려주고, 읽기 전용이면 값을 직접 돌려줘요.