Tengo una clase donde quiero aplicar sobrecarga de cadena en su atributo id
. Sin embargo, Moose no permite la sobrecarga de cadenas en los accesores de atributos. Por ejemplo:¿Cuál es la mejor forma de sobrecargar cadenas en un acceso de atributo de 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";
Lo anterior dará un error:
You are overwriting a locally defined method (id) with an accessor at C:/perl/site/lib/Moose/Meta/Attribute.pm line 927
He probado un par de opciones para evitar esto:
Marcado
id
is => bare
, y su sustitución con mi propio acceso:sub id {$_[0]->{id}}
. Pero esto es solo un truco.Tener el supercargador de cadenas use otro método que simplemente delegue de nuevo a id:
sub to_string {$_[0]->id}
.
Me pregunto si alguien tiene una mejor manera de hacerlo.
que es esencialmente la opción 2 de la pregunta en sintaxis más corta. No digo que sea malo, pero aún sería interesante saber por qué falla el primer enfoque de la pregunta. – musiKk
La sintaxis más corta es ligeramente más limpia. Con el problema de 3 arg, creo que este debe ser el camino a seguir. – stevenl