在数组中§
有关例程 splice,请参阅上下文中的主要文档
multi splice(, = 0, ?, * --> Array)multi method splice(Array: = 0, ?, * --> Array)
从索引 $start 开始删除 $elems 个元素,返回它们并用 @replacement 替换它们。如果省略 $elems 或其大于从 $start 开始的元素数量,则删除从索引 $start 开始的所有元素。如果省略 $start 和 $elems,则删除 Array 中的所有元素并返回。
$start 和 $elems 每个都可以指定为 Whatever 或 Callable,后者返回 Int 兼容值:然后将此返回值用作 splice 例程的相应参数。
Whatever $start 使用 @list(或调用者)的元素数量。Callable $start 使用一个参数调用——@list(或 self)中的元素数量。
Whatever $elems 从 $start 删除到 @list(或 self)的末尾(与没有 $elems 相同)。Callable $elems 使用一个参数调用——@list(或 self)中的元素数量减去 $start 的值。
示例
my = <a b c d e f g>;say .splice(2, 3, <M N O P>); # OUTPUT: «[c d e]»say ; # OUTPUT: «[a b M N O P f g]»
它可用于通过简单地拼接比当前大小更多的元素来扩展数组(自版本 6.d 起)
my = <a b c d e f g>;say .splice(6, 4, <M N O P>); # OUTPUT: «[g]»say ; # OUTPUT: «[a b c d e f M N O P]»
以下等价关系成立(假设 @a.elems ≥ $i)
@a.push($x, $y) @a.splice: * , *, $x, $y @a.pop @a.splice: *-1, @a.shift @a.splice: 0 , 1, @a.unshift($x, $y) @a.splice: 0 , 0, $x, $y @a[$i] = $y @a.splice: $i , 1, $y,
如上所述,可以为 $start 和 $elems 参数提供 Whatever 或 Callable 对象。例如,我们可以使用其中任何一个从数组中删除倒数第二个元素,前提是数组足够大以包含一个元素
my = <a b c d e f g>;say .splice: *-2, *-1; # OUTPUT: «[f]»say ; # OUTPUT: «[a b c d e g]»my = -> ;my = -> ;say .splice: , ; # OUTPUT: «[e]»say ; # OUTPUT: «[a b c d g]»
在角色 Buf 中§
有关方法 splice,请参阅上下文中的主要文档
method splice( Buf: = 0, ?, * --> Buf)
用其他元素替换缓冲区的元素,返回一个包含已删除元素的缓冲区。
my = Buf.new( 1, 1, 2, 3, 5 );say .splice: 0, 3, <3 2 1>; # OUTPUT: «Buf:0x<01 01 02>»say .raku; # OUTPUT: «Buf.new(3,2,1,3,5)»