此角色提供了一个接口,通过该接口,在绑定到 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 方法。
类型图§
PositionalBindFailover 的类型关系