У меня есть класс, в котором я хочу применить перегрузку строки к атрибуту 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}}
. Но это всего лишь взлом.
Использование перегрузчика строк использует другой метод, который просто делегирует обратно id: sub to_string {$_[0]->id}
.
Мне просто интересно, есть ли у кого лучший способ сделать это?