Masteries

技術的なことや仕事に関することを書いていきます.

Class::Accessor::Typed 0.03_02 で Type::Tiny 対応を試しています

papix.hatenablog.com

先日, 0.03を出したClass::Accessor::Typedですが, Type::Tiny対応を試した 0.03_02 をリリースしました. Development releaseなので, cpanm とかでインストールする時はバージョンを指定してインストールするようにしてください:

cpanm Class::Accessor::Lite@0.03_02

Class::Accessor::Typedはインスパイア元であるSmart::ArgsにならってMouse::Util::TypeConstraintsを使っているのですが, Smart::Args::TypeTiny派はType::Tinyを使いたいよね, となるのは自明でした. というわけで, Smart::Args::TypeTinyの実装を参考にしつつ, Mouse::Util::TypeConstraintsを使うか, Type::Tinyを使うかを差し替えられるようにしています.

デフォルトは従来どおりMouse::Util::TypeConstraintsで, 次のようにすればType::Tinyが使われます(Type::Tinyはオプションとして, Class::Accessor::Typedの依存モジュールにしていないので, 別途インストールする必要があります).

use Class::Accessor::Typed (
    type => 'TypeTiny',
    ...
);

ただ, これだと都度typeを指定する必要があるので面倒ですね. 書き忘れて意図せずデフォルト実装が使われることもありそうです. そこで, 次のエントリで紹介したような, パッケージを別途用意する方法だとシンプルに書けておすすめと思います:

papix.hatenablog.com

package MyClassAccessorTyped;

use Class::Accessor::Typed;

BEGIN { $Class::Accessor::Typed::TYPE_CLASS = "Class::Accessor::Typed::TypeTiny" }

sub import {
    goto \&Class::Accessor::Typed::import
}

1;

この辺りの, Type::Tinyを指定する方法はなんかいい方法がしっくり来ていなくて, 正式に対応するバージョンになるであろう0.04で使い方が変わる可能性がありそうです. 「こういう風になっていると嬉しそう!」というご意見などありましたら, TwitterやGitHubのIssueでコメント頂ければと思います.

github.com