, Мне еще предстоит выяснить, как заставить это работать таким образом. Я предполагаю, что есть какой-то метод, который я должен переопределить.

ая спример на странице документа Iterable

role DNA does Iterable {
  method iterator(){ self.comb.iterator }
};

my @a does DNA = 'GAATCC';
.say for @a; # OUTPUT: «G␤A␤A␤T␤C␤C␤» 

Я нашел это странным, это объявлено с использованием@поэтому я изменил его нанатуральный способ объявления строк,$:

my $a does DNA = 'GAATCC';

Но это терпит неудачу с несколько изумительным «Невозможно присвоить неизменное значение». Не нужно назначать на месте, поэтому мы можем сделать:

my $a = 'GAATCC';
$a does DNA;
.say for $a;

Который просто оставляет замешательство на потом. Но это просто печатает строку, не обращая никакого внимания наIterable Mixin. Давайте назовем это тогда явно:

.say for $a.iterator;

он делает то же самое, что и раньше, только печатает значение$a.iteratorбез фактического вызова функции:

<anon|69>.new

Это выглядит както же самое, что происходит в этом другом вопросе, Исходный вопрос: я не понимаю, какую роль в действительности играет Iterable, и чтоfor действительно, и когда он звонитiterator на каком-то объекте. Любая идея?

Ответы на вопрос(2)

Ваш ответ на вопрос