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)

MixHashBag으로 강제해요. 이때 가중치(weight)가 Int로 변환되는데, 그래서 일부 가중치가 음수이거나 0으로 잘려나가면 결과 Bag의 키 수가 원래 MixHash보다 적어질 수 있어요.

In Mix

method Bag (--> Bag:D)

MixBag으로 강제해요. 가중치가 Int로 변환되고, 일부 가중치가 음수이거나 0으로 잘리면 결과 Bag의 키 수가 원래 Mix보다 적어질 수 있어요.