読者です 読者をやめる 読者になる 読者になる

北海道苫小牧市出身の壮年PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

Mouse-1.3でMooseと挙動が違うコード

perl

コンフリクトした場合はスーパークラス側のメソッドが優先されるべきなんだけど、"Hage te nai"が出力される。

package Role1;
use Moose::Role;
sub hage { "Hage te ru" }

package Role2;
use Moose::Role;
sub hage { "Hage te nai" }

package Super;
use Moose;
sub hage { "Dotti demo yoi" }

package Sub;
use Moose;
extends 'Super';
with 'Role1', 'Role2';

package main;
print Sub->new->hage, "\n";
print "Done\n";


以下も挙動が違うけど、overrideのセマンティクスがわからないのでなんとも。Mouseはエラーになるが、その方がありがたい気がする。Moose-2.1005はクラスに生えてるメソッドを優先して"Dotti demo yoi"を出力した。

package Role;
use Mouse::Role;
override hage => sub { "Hage te ru" };

package Sub;
use Mouse;
sub hage { "Dotti demo yoi" }
with 'Role';

package main;
print Sub->new->hage, "\n";
print "Done\n";

前者についてはpull-reqしておいたので、経過はそちらにて。