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 arg 문제로, 나는 이것이 갈 길이되어야한다고 생각한다. – stevenl