コンフリクトした場合はスーパークラス側のメソッドが優先されるべきなんだけど、"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しておいたので、経過はそちらにて。