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 氏に教えてもらった。ありがとうございます!
あわせて読みたい: