클래스 Supplier

클래스 Supplier (Supplier) (raku-type-supplier)

live Supply 객체를 만들어 내는 공장(factory)이 Supplier예요. 이 객체가 바로 supply 위에 새 값을 내보내는(emit) 메커니즘을 제공하죠.

class Supplier { }
my $supplier = Supplier.new;
my $supply_1 = $supplier.Supply;
$supply_1.tap(-> $v { say "One $v" });
my $supply_2 = $supplier.Supply;
$supply_2.tap(-> $v { say "Two $v" });
$supplier.emit(42);

위 코드는 아래처럼 출력돼요.

One 42
Two 42

반면 on demand(요청에 따라) supply는 Supply 클래스의 공장 메서드나 supply 키워드로 만들어져요. live와 on-demand가 섞인 SupplySupplier::Preserving으로 만들 수 있어요.

method new

method new()

Supplier 생성자예요.

method Supply

method Supply(Supplier:D: --> Supply)

이 supplier에서 내보내는 모든 값이 전달되는 새 Supply 객체를 만들어요. 모든 live supply의 공장이죠.

method emit

method emit(Supplier:D: Mu \value)

주어진 값을 이 SupplierSupply로 만든 모든 supply의 모든 tap에 전달해요.

method done

method done(Supplier:D:)

done 콜백이 있는 모든 tap에서 그 콜백을 호출해요.

my $supplier = Supplier.new;
my $supply   = $supplier.Supply;
$supply.tap(-> $v { say $v }, done => { say "no more answers" });
$supplier.emit(42);
$supplier.done;

위 코드는 아래처럼 출력돼요.

42
no more answers

method quit

multi method quit(Supplier:D: Exception $ex)
multi method quit(Supplier:D: Str() $message)

quit 콜백이 있는 모든 tap에서 그 콜백을 호출하면서 예외를 전달해요. Str로 호출하면 제공된 메시지를 담은 X::AdHoc이 예외가 돼요.

이 메서드는 supply를 오류와 함께 종료할 때 쓰도록 만들어졌어요.

출처: Raku Docs - Supplier