"Não é possível atribuir a um valor imutável" ao tentar atribuir a uma sequência + função
Começando como exemplo na página Iterable doc
role DNA does Iterable {
method iterator(){ self.comb.iterator }
};
my @a does DNA = 'GAATCC';
.say for @a; # OUTPUT: «GAATCC»
Achei estranho declarar usando o@
, então eu mudei para onatural maneira de declarar strings,$
:
my $a does DNA = 'GAATCC';
Mas isso falha com um desconcertante "Não é possível atribuir a um valor imutável". Não há necessidade de atribuir no local, para que possamos fazer:
my $a = 'GAATCC';
$a does DNA;
.say for $a;
O que deixa a mistura para mais tarde. Mas isso apenas imprime a corda, sem prestar atenção aoIterable
mixin. Vamos chamá-lo explicitamente:
.say for $a.iterator;
faz quase a mesma coisa que antes, só que imprime o valor de$a.iterator
, sem realmente chamar a função:
<anon|69>.new
Isso parecea mesma coisa que está acontecendo nesta outra questão. A questão de base é que eu não entendo qual papel o Iterable realmente desempenha e qualfor
realmente faz e quando está chamandoiterator
em algum objeto. Qualquer ideia?