클래스 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가 섞인 Supply는 Supplier::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)
주어진 값을 이 Supplier의 Supply로 만든 모든 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를 오류와 함께 종료할 때 쓰도록 만들어졌어요.