这个问题与其他关于使块可迭代的问题在同一个问题上,但似乎揭示了mixins的一个不同问题(或者对我的语法有不同的误解).什么Iterable是使数据结构有效迭代,也就是说,你可以通过在它之前创建循环for.
Iterable用作对象的API,可以使用for构造和相关的迭代构造(如超运算符)进行迭代.
所以让我们尝试将其付诸实践:
my &logger = -> $event {
state %store;
if ( $event ) {
%store{ DateTime.new( now ) } = $event;
} else {
%store;
}
}
role Forable does Iterable {
method iterator(&self:) {
self( Nil );
}
}
logger( "One" );
logger( "Two" );
&logger does Forable;
.say for &logger;
Run Code Online (Sandbox Code Playgroud)
这根本行不通; say应用于&logger一个简单的项目.但是,如果我们将最后一句改为:
.say for &logger.iterator;
Run Code Online (Sandbox Code Playgroud)
我猜这表明该角色实际上正在工作,并且混入.由于类型为&loggeris Block+{Forable},如果Iterable没有直接混合,它可能不起作用.事实上,does Iterable从 …