我想这样做:
a << *b
但这发生在irb:
1.9.3p327 :020 > a
=> [1, 2, 3, 4]
1.9.3p327 :021 > b
=> [5, 6, 7]
1.9.3p327 :022 > a << *b
SyntaxError: (irb):22: syntax error, unexpected tSTAR
a << *b
^
我错过了什么吗?
答案 0 :(得分:5)
我之前评论过它,现在将其添加回答; - )
a + = b将完成你的工作
答案 1 :(得分:4)
试试这个:
a.concat(b)
它会输出:
=> [1, 2, 3, 4, 5, 6, 7]
答案 2 :(得分:3)
看看原因:
a = [1, 2, 3, 4]
b = [5, 6, 7]
p a.<<(*b)
# ~> -:3:in `<<': wrong number of arguments (3 for 1) (ArgumentError)
# ~> from -:3:in `<main>'
<<
方法只需要一个参数。现在,如下所示,splat(*
)是一个运算符,它将创建5,6,7
,<<
方法不期望,相反,它只需要一个对象。因此Ruby的设计不允许在*
之前b
。
a = [1, 2, 3, 4]
b = [5, 6, 7]
p a << *
# ~> -:3: syntax error, unexpected *
a = [1, 2, 3, 4]
b = [5, 6, 7]
p a << *b
# ~> -:3: syntax error, unexpected *
# ~> p a << *b
# ~> ^
这就是为什么2个合法错误:
错误的参数数量(3表示1)(ArgumentError)
语法错误,意外*
可能你可以使用 -
a = [1, 2, 3, 4]
b = [5, 6, 7]
p a.push(*b)
# >> [1, 2, 3, 4, 5, 6, 7]
答案 3 :(得分:1)
检查类型签名:ary&lt;&lt; obj→ary。它只需要一个参数。尝试:a.push(* b)(推(obj,...)→ary)
答案 4 :(得分:1)
鉴于
a = [1, 2, 3, 4]
b = [5, 6, 7]
您想要的解决方案是
a.concat b
# => [1, 2, 3, 4, 5, 6, 7]
但是,您可能会发现这有点有趣
b.each &a.method(:<<)
a
# => [1, 2, 3, 4, 5, 6, 7]
这表示“b”
中每个元素的调用方法a#<<
相当于
b.each &a.method(:push)
a
# => [1, 2, 3, 4, 5, 6, 7]