, Мне еще предстоит выяснить, как заставить это работать таким образом. Я предполагаю, что есть какой-то метод, который я должен переопределить.
ая спример на странице документа Iterable
role DNA does Iterable {
method iterator(){ self.comb.iterator }
};
my @a does DNA = 'GAATCC';
.say for @a; # OUTPUT: «GAATCC»
Я нашел это странным, это объявлено с использованием@
поэтому я изменил его нанатуральный способ объявления строк,$
:
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
на каком-то объекте. Любая идея?