在数组中§
有关方法 push,请参阅上下文中的主要文档
multi method push(Array: ** is raw --> Array)multi method push(Array: \value --> Array)multi method push(Array: Slip \values --> Array)
将提供的 value 或 values 添加到数组的末尾,并返回修改后的数组。如果任何参数是 Slip
,则方法 push
将添加由参数的 迭代器 产生的值。如果调用数组或 Slip
是惰性的,则会引发异常。
示例
my = <a b c>;.push: 'd';say ; # OUTPUT: «[a b c d]»
请注意,push
不会尝试扁平化其参数列表。如果您将数组或列表作为要 push 的内容传递,它将变为一个额外的元素
my = <a b c>;my = <d e f>;.push: ;say .elems; # OUTPUT: «4»say [3].join; # OUTPUT: «def»
仅当您将多个值作为单独的参数或在 Slip
中提供时,才会将它们添加到数组中
my = '1';say .push: 'a', 'b'; # OUTPUT: «[1 a b]»my = <E F>;say .push: .Slip; # OUTPUT: «[1 a b E F]»
如果您想附加由单个非滑动 Iterable
产生的多个值,请参阅 方法 append。
在哈希中§
有关方法 push,请参阅上下文中的主要文档
method push(Hash: +new)
将 new
元素添加到哈希中,其语义与哈希赋值相同,但有三个例外
哈希不会首先清空,即不会删除旧对。
如果哈希中已存在某个键,并且相应的值是
Array
,则新值将推送到数组上(而不是替换它)。如果哈希中已存在某个键,并且相应的值不是
Array
,则旧值和新值都将放在数组中,取代旧值。
示例
my = a => 1;.push: (a => 1); # a => [1,1].push: (a => 1) xx 3 ; # a => [1,1,1,1,1].push: (b => 3); # a => [1,1,1,1,1], b => 3.push('c' => 4); # a => [1,1,1,1,1], b => 3, c => 4push , 'd' => 5; # a => [1,1,1,1,1], b => 3, c => 4, d => 5
请注意,参数列表中的文字对可能会被解释为 命名参数,因此不会出现在 Hash
中
my .= push(e => 6);say .raku; # OUTPUT: «{}»
使用相应的 子例程 来捕获此类错误
push my , f => 7;CATCH ;# OUTPUT: «Unexpected named argument 'f' passed»
另请注意,push 可用作哈希初始化期间赋值的替代,非常有用。以倒排索引为例
my = 'hash' => 323, 'pair' => 322, 'pipe' => 323;(my ).push: .invert;say ; # OUTPUT: «{322 => pair, 323 => [pipe hash]}»
请注意,这样的初始化也可以写成
my = 'hash' => 323, 'pair' => 322, 'pipe' => 323;my .= push: .invert;
注意:与 append
相比,push
会按原样添加给定值,而 append
会 slip
添加给定值
my = :a[42, ]; .push: "a" => <a b c a>;say ; # OUTPUT: «{a => [42 (a b c a)]}»my = :a[42, ]; .append: "a" => <a b c a>;say ; # OUTPUT: «{a => [42 a b c a]}»
在任意中§
有关方法 push,请参阅上下文中的主要文档
multi method push(Any \SELF: |values --> Positional)
方法 push 是为未定义的调用者定义的,并且允许自动将未定义的值初始化为一个空的 Array
,除非未定义的值已经实现了 Positional
。然后,提供的参数将被推送到新创建的 Array 中。
my ;say <a>; # OUTPUT: «(Any)» <-- Undefined<a>.push(1); # .push on Anysay ; # OUTPUT: «{a => [1]}» <-- Note the Array
在角色 Buf 中§
有关方法 push,请参阅上下文中的主要文档
method push( )
在缓冲区的末尾添加元素。
my = Buf.new( 1, 1, 2, 3, 5 );.push( 8 );say .raku; # OUTPUT: «Buf.new(1,1,2,3,5,8)»
在 IterationBuffer 中§
有关方法 push,请参阅上下文中的主要文档
method push(IterationBuffer: Mu \value)
在 IterationBuffer
的末尾添加给定值,并返回给定值。
在 Nil 中§
有关方法 push,请参阅上下文中的主要文档
method push(*@)
警告用户他们尝试将内容推送到 Nil
或派生类型对象。
在独立例程中§
有关子例程 push,请参阅上下文中的主要文档
multi push(\a, ** is raw)multi push(\a, \b)
对第一个参数调用方法 push
,传递剩余参数。方法 push
应该将提供的值添加到集合或其部分的末尾。有关此子例程间接引用的示例,请参阅Hash
方法的文档。
方法 push
应该扁平化所有类型为 Slip
的参数。因此,如果你想为新集合类型实现一个符合要求的方法,它应该表现得好像它的签名只是
multi method push(::?CLASS: ** is raw --> ::?CLASS)
如果新类型实现了 Positional
角色,则通过默认基类提供自动激活到新类型的实例。如果新类型不是 Positional
,则可以通过添加具有类似签名的多方法来支持自动激活,例如
multi method push(::?CLASS: ** is raw --> ::?CLASS)