Tôi có một lớp mà tôi muốn áp dụng quá tải chuỗi trên thuộc tính id
của nó. Tuy nhiên, Moose không cho phép quá tải chuỗi trên các trình truy cập thuộc tính. Ví dụ:cách tốt nhất để chuỗi quá tải trên một thuộc tính Moose accessor là gì?
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";
trên sẽ đưa ra một lỗi:
You are overwriting a locally defined method (id) with an accessor at C:/perl/site/lib/Moose/Meta/Attribute.pm line 927
Tôi đã thử một vài tùy chọn để làm được việc này:
Đánh dấu
id
is => bare
, và thay thế nó với người truy cập của riêng tôi:sub id {$_[0]->{id}}
. Nhưng đây chỉ là một hack.Có trình xử lý chuỗi quá tải sử dụng một phương pháp khác chỉ ủy quyền trở lại id:
sub to_string {$_[0]->id}
.
Tôi chỉ tự hỏi liệu có ai có cách làm tốt hơn không?
Mà thực chất là phương án 2 từ câu hỏi theo cú pháp ngắn hơn. Tôi không nói nó xấu nhưng nó vẫn sẽ là thú vị để biết tại sao cách tiếp cận đầu tiên từ câu hỏi thất bại. – musiKk
Cú pháp ngắn hơn là hơi sạch hơn. Với vấn đề 3 arg, tôi đoán đây phải là con đường để đi. – stevenl