MP0

MPがありません。

UNIVERSAL::DOESについてのメモ

Perlのオブジェクトに $object->DOES('SomeRole') みたいな、ロールを消費したかどうかを判定できる(?)メソッドがあるのですが、それについていろいろ知見を得たのでまとめます。

  • Perl自体にロールを消費したかどうかを判定する機能はない
    • 特にDOESがオーバーライドされていない場合はUNIVERSAL::isaと等価 *1
    • クラスビルダー(Moose::Object)などで各々オーバーライドしてロールを消費したかの判定をするイメージ
    • 使うのならクラスビルダーごとにきちんと挙動を把握しておいたほうが良さそう
  • そもそもあまり使われていない
    • UNIVERSAL::canで判定したほうが確実 (変なDOESの実装だときちんと判定してくれない場合もありうるので・・・)
    • 大半のrole判定がほしい実装はMooseを使うのがベストプラクティスになってしまってそういう場面でのDOESの出番が無かった

これらに関してはid:karupanerura氏にいろいろ教えていただきました。
ありがとうございました。