私は、そのid
属性に文字列のオーバーロードを適用するクラスを持っています。ただし、Mooseでは、属性アクセサ上で文字列のオーバーロードが許可されていません。例えば:私はこれを回避するためのオプションのカップルを試してみましたMoose属性アクセサ上で文字列をオーバーロードする最も良い方法は何ですか?
You are overwriting a locally defined method (id) with an accessor at C:/perl/site/lib/Moose/Meta/Attribute.pm line 927
:
が
はid
is => bare
をマークし、それを置き換えるpackage Foo; use Moose; use overload '""' => \&id, fallback => 1; has 'id' => ( is => 'ro', isa => 'Int', default => 5, ); package main; my $foo = Foo->new; print "$foo\n";
上記のエラーになります私自身のアクセサリーで:
sub id {$_[0]->{id}}
。しかし、これはちょうどハックです。文字列オーバーロードを使用すると、別の方法でid:
sub to_string {$_[0]->id}
に委譲するだけです。
誰かがこれを行う良い方法があるのでしょうか?
から
をより短い構文の質問から。私はそれが悪いと言っているわけではありませんが、質問からの最初のアプローチが失敗する理由を知ることはまだ興味深いでしょう。 – musiKk
構文が短いとややクリーンです。 3つの引数の問題で、私はこれが行く方法でなければならないと思います。 – stevenl