class Supplier { }

这是一个实时 Supply 对象的工厂,它提供了向供应中发出新值的机制

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

按需供应是由 Supply 类的工厂方法或 supply 关键字创建的。可以使用 Supplier::Preserving 创建实时和按需 Supply 的混合。

方法§

方法 new§

method new()

Supplier 构造函数。

方法 Supply§

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

这将创建一个新的 Supply 对象,任何在此供应商上发出的值都将传递给该对象。这是所有实时供应的工厂。

方法 emit§

method emit(Supplier:D: Mu \value)

将给定值发送到此 Supplier 上的 Supply 创建的所有供应的所有监听器。

方法 done§

method done(Supplier:D:)

调用所有具有回调的监听器的 done 回调。

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

方法 quit§

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

调用所有具有回调的监听器的 quit 回调,将异常传递给它们。如果使用 Str 调用,则异常将是带有提供的消息的 X::AdHoc

这用于使用错误关闭供应。

类型图§

Supplier 的类型关系
raku-type-graph Supplier Supplier Any Any Supplier->Any Mu Mu Any->Mu Supplier::Preserving Supplier::Preserving Supplier::Preserving->Supplier

展开上面的图表