在数组中§
有关例程 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)»