可以多个对象应插入 << 操作员在轨3.1?
-
25-10-2019 - |
题
我可以写下...
raw_data.categories.each do |category|
obj.categories << category
end
如以下,而不是?...
obj.categories << raw_data.categories
解决方案
obj.categories |= raw_data.categories
其他提示
看看 Array#<<
和 Array#push
.
Array#<<
需要其中一个是附加在地方给出阵列。例如:
irb> array = %w[ a b c ] # => ["a", "b", "c"]
irb> array << 'd' # => ["a", "b", "c", "d"]
但是,如果你通过了一阵,您将惊奇的结果
irb> array << ['e', 'f', 'g'] # => ["a", "b", "c", "d", ["e", "f", "g"]]
Array#push
可处理1+对象,每个都附有该阵列。
irb> array = %w[ a b c ] # => ["a", "b", "c"]
irb> array.push 'd' # => ["a", "b", "c", "d"]
然而,叫 #push
与一系列给你同样的结果 #<<
.
irb> array.push ['e', 'f', 'g'] # => ["a", "b", "c", "d", ["e", "f", "g"]]
为了推动所有的元件阵列,只是添加一个 *
之前的第二阵列。
irb> array.push *['e', 'f', 'g'] # => ["a", "b", "c", "d", "e", "f", "g"]
在一个相关的注意,同时 Array#+
并串连阵列,它也将允许重复的价值观。
irb> array = %w[ a b c ] # => ["a", "b", "c"]
irb> array += ['d'] # => ["a", "b", "c", "d"]
irb> array += ['d'] # => ["a", "b", "c", "d", "d"]
如果这是不希望的, |
操作员将返回联盟的两个阵列,而不重复的价值观。
irb> array = %w[ a b c ] # => ["a", "b", "c"]
irb> array |= ['d'] # => ["a", "b", "c", "d"]
irb> array |= ['d'] # => ["a", "b", "c", "d"]
不隶属于 StackOverflow