Mojo::EventEmitter - イベントエミッターの基底クラス
使い方
package Cat;
use Mojo::Base 'Mojo::EventEmitter';
# イベントの発行
sub poke {
my $self = shift;
$self->emit(roar => 3);
}
package main;
# イベントの購読
my $tiger = Cat->new;
$tiger->on(roar => sub {
my ($tiger, $times) = @_;
say 'RAWR!' for 1 .. $times;
});
$tiger->poke;
説明
Mojo::EventEmitterはイベント発行オブジェクトのためのシンプルな基底クラスです。
イベント
Mojo::EventEmitterは次のイベントを発行します。
error
$e->on(error => sub {
my ($e, $err) = @_;
...
});
これは、エラーのための特別なイベントで、このクラスからは直接に発生しませんが、処理できない場合は、致命的になります。サブクラスは、発生させるかもしれませんが、必要不可欠ではありません。
$e->on(error => sub {
my ($e, $err) = @_;
say "This looks bad: $err";
});
メソッド
Mojo::EventEmitterはMojo::Baseからすべてのメソッドを継承しており、 次の新しいメソッドを実装しています。
catch
$e = $e->catch(sub {...});
errorイベントを購読します。
# Longer version
$e->on(error => sub {...});
emit
$e = $e->emit('foo');
$e = $e->emit('foo', 123);
イベントを安全に発行し、失敗した場合はerrorイベントを発行します。
has_subscribers
my $bool = $e->has_subscribers('foo');
イベントが購読者を持っているかをチェックします。
on
my $cb = $e->on(foo => sub {...});
イベントを購読します。
$e->on(foo => sub {
my ($e, @args) = @_;
});
once
my $cb = $e->once(foo => sub {...});
イベントを購読し、一度だけイベントが発行された後に、購読をやめます。
$e->once(foo => sub {
my ($e, @args) = @_;
});
subscribers
my $subscribers = $e->subscribers('foo');
イベントのすべての購読者。
# 最後の購読者の購読をやめる
$e->unsubscribe(foo => $e->subscribers('foo')->[-1]);
# 購読者の順序を変える
@{$e->subscribers('foo')} = reverse @{$e->subscribers('foo')};
unsubscribe
$e = $e->unsubscribe('foo');
$e = $e->unsubscribe(foo => $cb);
イベントの購読をやめます。
デバッグ
MOJO_EVENTEMITTER_DEBUG環境変数を設定すれば、 より進んだ詳細な情報をSTDERRに出力することができます。
MOJO_EVENTEMITTER_DEBUG=1
参考
Mojolicious, Mojolicious::Guides, http://mojolicio.us.
(Mojolicious 8.12を反映。2019年5月14日更新)
Mojoliciousドキュメント日本語訳