my class IterationBuffer { }

Iterator 类的实现需要一种轻量级方式来存储/传输值时,将使用 IterationBuffer。它不创建 Scalar 容器,并且仅通过 BIND-POS 方法支持变异,仅通过 pushunshift 方法支持添加值,支持使用 appendprepend 方法合并两个 IterationBuffer 对象,并支持使用 clear 方法重置。

它可以强制转换为 ListSlipSeq

值将“按原样”存储,这意味着 Junctions 将按原样存储,并且不会 自动线程化

从 Rakudo 编译器的 2021.12 版本开始,new 方法还接受 Iterable 作为可选参数,该参数将用于填充 IterationBuffer

方法§

方法 push§

method push(IterationBuffer:D: Mu \value)

IterationBuffer 的末尾添加给定值并返回给定值。

方法 unshift§

method unshift(IterationBuffer:D: Mu \value)

IterationBuffer 的开头添加给定值并返回给定值。从 Rakudo 编译器的 2021.12 版本开始可用。

方法 append§

method append(IterationBuffer:D: IterationBuffer:D $other --> IterationBuffer:D)

IterationBuffer 的末尾添加其他 IterationBuffer 的内容,并返回更新的调用者。

方法 prepend§

method prepend(IterationBuffer:D: IterationBuffer:D $other --> IterationBuffer:D)

IterationBuffer 的开头添加其他 IterationBuffer 的内容,并返回更新的调用者。从 Rakudo 编译器的 2021.12 版本开始可用。

方法 clear§

method clear(IterationBuffer:D: --> Nil)

IterationBuffer 中的元素数量重置为零,有效地从中删除所有数据,并返回 Nil

方法 elems§

method elems(IterationBuffer:D: --> Int:D)

返回 IterationBuffer 中的元素数量。

方法 AT-POS§

multi method AT-POS(IterationBuffer:D: int   $pos)
multi method AT-POS(IterationBuffer:D: Int:D $pos)

返回给定元素位置的值,如果元素位置超出 IterationBuffer 的长度,则返回 Mu,或者将抛出错误,指示索引超出范围(对于负位置值)。

方法 BIND-POS§

multi method BIND-POS(IterationBuffer:D: int   $posMu \value)
multi method BIND-POS(IterationBuffer:D: Int:D $posMu \value)

将给定值绑定到给定元素位置并返回它。如果给定的元素位置超出 IterationBuffer 的长度,则 IterationBuffer 将自动延长。对于负位置值,将抛出指示索引超出范围的错误。

方法 Slip§

method Slip(IterationBuffer:D: --> Slip:D)

IterationBuffer 强制转换为 Slip

方法 List§

method List(IterationBuffer:D: --> List:D)

IterationBuffer 强制转换为 List

方法 Seq§

method Seq(IterationBuffer:D: --> Seq:D)

IterationBuffer 强制转换为 Seq

方法 raku§

method raku(IterationBuffer:D: --> Str)

生成 IterationBuffer 的表示形式,表示形式为以 ".IterationBuffer" 为后缀的 List,使其与普通列表不同。不会进行往返转换。仅用于调试用途,特别是与 dd 一起使用。