Sono confuso da questo frammento di codice in cui apparentemente non riesco a chiamare il metodo WHAT
in una concatenazione di stringhe?Perché la concatenazione delle stringhe di Perl 6 non è come .WHAT?
my $object = 'Camelia';
say $object;
say $object.WHAT;
say "^name: The object is a " ~ $object.^name;
say "WHAT: The object is a " ~ $object.WHAT;
L'output mostra che chiamando ^name
opere (un metamethod da Metamodel::ClassHOW), ma Perl 6 è confuso da .WHAT
come se ci fosse un problema di precedenza.
Camelia
(Str)
^name: The object is a Str
Use of uninitialized value of type Str in string context
Any of .^name, .perl, .gist, or .say can stringify undefined things, if needed. in block <unit> at meta_methods.p6 line 7
WHAT: The object is a
mio Perl 6:
This is Rakudo version 2015.12-219-gd67cb03 built on MoarVM version 2015.12-29-g8079ca5
implementing Perl 6.c.
Sembra davvero rotto che si stringificherà in alcuni casi e non in altri. –
l'idea è che se si concatena un valore, ci si aspetta che sia un valore appropriato. Se si prevede di ottenere un valore non definito, si useranno .perl e gli amici (se si desidera "(Str)") o.^Nome (se si desidera "Str"). – timotimo
@briandfoy Ho riscritto la mia risposta. Forse la mia nuova risposta avrà più senso. – raiph