此角色提供了一个接口,通过该接口,在绑定到 Positional
参数时,可以将对象强制转换为 Positional
。
例如,Seq
类型不是 Positional
,但您仍然可以编写以下内容,因为它 执行 PositionalBindFailover
角色
sub fifths()my := gathersay fifths(); # OUTPUT: «5»
在上面的示例中调用 fifths
通常会产生类型错误,因为 $seq
的类型为 Seq
,它不执行 @
-sigil 暗示的 Positional
接口。
但是,签名绑定器会识别 Seq
执行 PositionalBindFailover
角色,并调用其 cache
方法将其强制转换为 List
,它执行 Positional
角色。
执行该角色的自定义类也是如此;它们只需提供一个生成 Iterator
的 iterator
方法
does PositionalBindFailoversub first-five ()first-five Foo.new; # OUTPUT: # OUTPUT: «(42 Nil Nil Nil Nil)»
方法§
方法 cache§
method cache(PositionalBindFailover: --> List)
基于 iterator
方法返回一个 List
,并对其进行缓存。对 cache
的后续调用始终返回相同的 List
对象。
方法 list§
multi method list(::?CLASS:)
基于 iterator
方法返回一个 List
,而不进行缓存。
方法 iterator§
method iterator(PositionalBindFailover:)
此方法存根确保实现角色 PositionalBindFailover
的类提供一个 iterator
方法。