我对Ruby Enumerable模块非常熟悉,或者至少我如此认为。采取以下代码段:
names = [ "Donald", "Daisy", "Daffy" ]
new_empty_array = []
new_names_array = names.map do |name|
new_empty_array << name
end
puts new_names_array.inspect
# prints [["Donald", "Daisy", "Daffy"], ["Donald", "Daisy", "Daffy"], ["Donald", "Daisy", "Daffy"]]
我知道我使用的方式不map
正确,但是我正在上一堂关于Ruby枚举的课程,并且在一个学生进行测试时遇到了这个示例map
。shovel(<<
)运算符的返回值是添加元素后的数组。结果不应该是:
[["Donald"], ["Donald", "Daisy"], ["Donald", "Daisy", "Daffy"]]
似乎整个循环过程和铲子运算符的最终返回值都已处理?是什么赋予了?
map
在您的情况下,的结果是一个数组,该数组由new_empty_array
多次引用相同的数组组成。您不是在创建三个不同的数组,而是在map
块中修改了相同的数组。
要获得期望的输出,您需要执行以下操作:
new_names_array = first_names.map do |name|
(new_empty_array << name).dup
end
附带说明一下,您可以使用此代码(比上面的代码更明显)获得所需的输出:
(1..first_names.size).map do |num|
first_names.take(num)
end
#=> [["Donald"], ["Donald", "Daisy"], ["Donald", "Daisy", "Daffy"]]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句