Plaggerで他のプラグインを継承するときの注意というかメモ

読了まで:約1分


概要: Plagger で​他の​プラグインを​継承する​場合の​注意。


  • [[Plagger ​使って​ LastFM の​最近​聴いた​音楽を​ Twitter に​投稿する​ /post/50888698188]] に​対して​送られた​トラックバック、
  • エロチック​街道@はてな - Publish::Twitter で​日本語を​投稿する​ で​突っ込まれた​ことなんだけど、​既存の​ Plagger の​プラグインを​書き換える​場合、​対象と​なる​プラグインを​継承してから、​ 目的の​部分を​書き換える、と​いう​ほうが​いいみたい。​で、​それは​いいんだけど、​ 実際に​その​方​法で​やったら​ちょっとは​まったので、​それを​メモ。

既存の​ Plagger プラグインを​継承する​場合、register​メソッドの​書き方に​よっては、​ registerメソッドを​書き直さないと​動かない。

例を​挙げると、​継承元のregister​メソッドで、

sub register {
my ( $self, $context ) = @_;
$context->register_hook(
$self,
'subscription.load' => \&load,
)
}

の​ように​メソッドの​リファレンスが​直接指定されている​場合、​どうも​継承元が​呼び出されるっぽい。​ た​ぶんこの​あたりの​挙動に​ついては、​Plagger が​どうの​こうのと​いうより、​ Perl の​継承とか​リファレンスが​どうとか​その​あたりだと​思う。

で、​逆に、

sub register {
my ( $self, $context ) = @_;
$context->register_hook(
$self,
'subscription.load' => $self->can('load'),
)
}

の​ように​ can メソッド使ってる​場合、​問題ないみたい。​ 実際に​ Subscription::XPath はcanが​使われていて、​それを​継承している​ Subscription::XOXO は​問題な​さそう。​ (実際には​動かしてない。​多分​問題ないはず。​)

で、​思ったんだけど、​実際に​ Plagger の​プラグイン書く​ときは​継承される​ことも​考えて、​ フックに​登録する​ときはcan​メソッド使った​ほうが​いいかも。​ すくなくともregister​メソッド書き直すことには​ならない。​と​思う。

とりあえず​メモ終わり。​何か​マズってたら​教えてください。

#FIXME

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。