Mouse なクラスと subtype

今日 Mouse を最新版にしたら書いていたコードが動かなくなった。

subtype していたところで、

The type constraint 'Ark::Request' has already been created in Mouse::Util::TypeConstraints and cannot be created again in Ark::Context

というエラーになってしまう。これは Mouse の subtype のところのコードを読めばすぐわかるが、違う場所で重複定義しようとしたときに出るエラーだ。

subtype 一回しか書いてないのに重複定義とは何事か、と思ったが、今の Mouse では Mouse でクラスを作るとそのクラスに class_type が設定されるようになってるみたい。

つまりこの場合は Ark::Request は Mouse なクラスなのですでに class_type されているのだが、それをさらに subtype で定義しようとしてエラーになってたというわけ。

こちらの挙動が Moose と同じで、いままでの Mouse のほうがちょっと互換性がなかったということみたい。

というようなことを Mouse メンテナーであるところの tokuhirom 氏や、MouseX ファウンダーであるところの ikasam_a 氏に教えてもらった。ありがとうございます!

あわせて読みたい:

Mouse の subtype に関する非互換 - TokuLog 改めB日記

by typester / at 2009-04-21T13:46:00 / perl / Comments(0)