我想这样做:
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 ^
型我错过了什么吗?
k4ymrczo1#
这条线将完成您的工作:
a += b
字符串
jecbmhm32#
试试这个:
a.concat(b)
字符串它将输出:
=> [1, 2, 3, 4, 5, 6, 7]
型
x7yiwoj43#
看看这里的原因:
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之前使用*。
<<
*
5,6,7
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 # ~> ^
型这就是为什么两个合法的错误:
或许你可以用-
a = [1, 2, 3, 4] b = [5, 6, 7] p a.push(*b) # >> [1, 2, 3, 4, 5, 6, 7]
yc0p9oo04#
给予
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#<<”相当于
a#<<
b.each &a.method(:push) a # => [1, 2, 3, 4, 5, 6, 7]
zpjtge225#
检查类型签名:ary << obj → ary。它只需要一个参数。尝试:a.push(*B)(push(obj,...)→ ary)
5条答案
按热度按时间k4ymrczo1#
这条线将完成您的工作:
字符串
jecbmhm32#
试试这个:
字符串
它将输出:
型
x7yiwoj43#
看看这里的原因:
字符串
<<
方法只需要一个参数。所以现在如下所示,splat(*
)是一个操作符,它将创建5,6,7
,<<
方法不需要,而是只需要一个对象。因此Ruby的设计不允许在b
之前使用*
。型
这就是为什么两个合法的错误:
或许你可以用-
型
yc0p9oo04#
给予
字符串
你想要的解决方案是
型
不过,您可能会觉得这有点有趣
型
这表示“在B中的每个元素上调用方法
a#<<
”相当于
型
zpjtge225#
检查类型签名:ary << obj → ary。它只需要一个参数。尝试:a.push(*B)(push(obj,...)→ ary)