Raku의 Bag — 객체를 Bag으로 강제하기
Raku의 Bag — 객체를 Bag으로 강제하기
원소의 중복 횟수까지 세고 싶을 때 Bag이 유용해요. Bag 메서드는 여러 타입의 객체를 Bag으로 강제(coerce)해 줘요. 타입에 따라 동작 방식이 조금씩 다르지만, 공통적으로 'Bag으로 만든다'는 목적은 같아요.
출처: Raku 공식 문서 — Bag
본문
In Any
method Bag(--> Bag:D) is nodal
호출한 객체를 Bag으로 강제해요. 이때 Positional(위치 기반) 객체는 값들의 목록으로 취급돼요.
In role Setty
method Bag(Setty:D: --> Bag:D)
호출한 객체의 원소들을 담은 Bag을 돌려줘요.
my Bag $b = Set.new(1, 2, 3).Bag;
say $b; # OUTPUT: «Bag(3 1 2)»
이렇게 만들어진 Bag의 원소 수량은 1로 설정돼요.
say (1,2,3).Bag{1}; # OUTPUT: «1»
In MixHash
method Bag (--> Bag:D)
MixHash를 Bag으로 강제해요. 이때 가중치(weight)가 Int로 변환되는데, 그래서 일부 가중치가 음수이거나 0으로 잘려나가면 결과 Bag의 키 수가 원래 MixHash보다 적어질 수 있어요.
In Mix
method Bag (--> Bag:D)
Mix를 Bag으로 강제해요. 가중치가 Int로 변환되고, 일부 가중치가 음수이거나 0으로 잘리면 결과 Bag의 키 수가 원래 Mix보다 적어질 수 있어요.