Mouse 0.44 released with duck_type
インターフェイスベースの型制約を元に面白いことができないかと思い,Mouse 0.44にMouse::Util::TypeConstraints::duck_typeを加えた。もっとも,Mooseにはずいぶん前から実装されているのだが。
duck_typeとは,オブジェクトが特定のメソッドを調べるかどうかをチェックする型制約である。
use Any::Moose; use Any::Moose '::Util::Type::Constraints'; has ostream => ( is => 'rw', isa => duck_type([qw(print)]), ); ... sub say { my $self = shift; $self->ostream->print(@_, "\n"); }
たとえば上記のように,単に特定のメソッドを持っているオブジェクトならなんでもかまわない,というケースで使用できる。ロールによる型制約よりも高速なのもうれしい*1。