最近Mooseをv1.15にアップグレードしたところ、使用しているモジュールのセットが機能しなくなったことがわかりました。私が得るエラーは次のとおりです。
You cannot coerce an attribute (source) unless its type (GOBO::Node) has a coercion at
/opt/local/lib/perl5/site_perl/5.12.0/darwin-multi-2level/Moose/Meta/Role/Application/ToClass.pm line 142
私はいくつかの考えられるエラーの原因を見ることができ、問題を解決する方法についてのアドバイスをいただければ幸いです。
GOBO::Nodeのコードの最初のビットは次のようになります。
package GOBO::Node;
[...]
extends 'GOBO::Base';
with 'GOBO::Labeled';
with 'GOBO::Attributed';
coerce 'GOBO::Node'
=> from 'Str'
=> via { new GOBO::Node(id=>$_) };
has 'source' => (is => 'rw', isa => 'GOBO::Node');
このパッケージで使用されるロールには、GOBO :: Nodesの属性もあり、エラーメッセージに記載されている属性「source」もその1つです。
GOBO :: Nodeに強制がある理由の一部は、新しいノードを作成するときのショートカットのようです。強制するよりもBUILDARGSを使用する方が良いでしょうか?
複数のパッケージで強制を使用できるようにする場合は、どこに強制を配置する必要がありますか?(例)GOBO :: Attributedに強制を追加すると、すでに存在しているという警告が表示されます。ただし、強制がないと、上記のように強制できないという警告が表示されます。
サブタイプの個別のパッケージがあります。GOBO :: Nodeのサブタイプ(GOBO :: Node :: ProtoNodeなど)と強制を作成し、それを属性に使用してGOBO :: Nodesにする方がよいでしょうか?
この問題に関するヘルプやアドバイスをありがとうございます!