2012-01-18 4 views
3

私は次でそれを試してみました:はMooseX ::メソッド::署名は、非ムースのクラスで使用することはできますか?

package Foo; 
sub new { 
    my ($type) = @_; 
    return bless {}, $type; 
} 

package Bar; 
use Moose; 

package Baz; 
use Moose; 
use MooseX::Method::Signatures; 

method exec1 (Foo $f, Bar $b) { 
    ...; 
} 
method exec2 ($f where {$_->isa('Foo')}, Bar $b) { 
    ...; 
} 

私はexec2が働くことができることがわかったが、EXEC1ため、コンパイル時エラーがあります。 fooがマウスオブジェクト(これらは私が変更することはできませんよクラスである)である場合、同じエラーが発生します。

'Foo' could not be parsed to a type constraint - maybe you need to pre-declare the type with class_type at C:/strawberry/perl/site/lib/Parse/Method/Signatures/TypeConstraint.pm line 74 

しかし、exec1シグネチャで動作する方法はありますか?

答えて

5

メソッド宣言の前にこれを追加します。エラーがとにかくMXMSのために、かなりはっきりしていた

use Moose::Util::TypeConstraints; 
BEGIN { class_type 'Foo'; } 

;

2

は、方法であってもよい::署名はあなたのために働く、あなたはムースを使用していない場合は特に、唯一の署名が必要になります。

+0

)フェア十分な提案を、私はまだ実際のシナリオ缶以上かどうかを確認したいのですが解決されます。 – stevenl

関連する問題