我有一个类,想对它的id
属性进行字符串重载。但是,Moose不允许在属性访问器上应用字符串重载。例如:
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";
上述代码将会产生一个错误:
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
,并替换为自己的访问器:sub id {$_[0]->{id}}
。但这只是一个hack。使字符串重载器使用另一个方法,该方法只是将其委托回 id:
sub to_string {$_[0]->id}
。
我想知道是否有更好的方法来处理这个问题?