我有这个代码:
def yeller(array)
a = array.each(&:upcase)
puts a
puts array
return "a: " + a.join
return "array: " + array.join
end
yeller(%w[a, b, c]) # => "a: a,b,c"
# >> a,
# >> b,
# >> c
# >> a,
# >> b,
# >> c
def yeller(array)
a = array.map(&:upcase)
puts a
puts array
return "a: " + a.join
return "array: " + array.join
end
yeller(%w[a, b, c]) # => "a: A,B,C"
# >> A,
# >> B,
# >> C
# >> a,
# >> b,
# >> c
令人困惑的是,array
消失了。它在哪里? each
和map
之间有什么区别?
请更熟悉Ruby的人来纠正我:我理解map
迭代数组并返回一个数组,而each
只迭代。
答案 0 :(得分:2)
该文件建议:
每个{|项目|阻止}→ary单击以切换源 每个→普查员 为self中的每个元素调用给定的块一次,将该元素作为参数传递。
和
map {| item |阻止}→new_ary单击以切换源地图→枚举器 为self的每个元素调用给定的块一次。
创建一个包含块返回值的新数组。
另见Enumerable#collect。
如果没有给出阻止,则返回枚举器。
实际上意味着 map
会创建另一个新数组,而each
只会迭代并且不会触及原始数组。
一个例子:
def yeller(array)
a = array.each(&:upcase)
puts a
puts array
puts "a: " + a.join
puts "array: " + array.join
puts "a == array?" + (a==array).to_s
end
yeller(%w[a, b, c])
def yeller(array)
a = array.map(&:upcase)
puts a
puts array
puts "a: " + a.join
puts "array: " + array.join
end
yeller(%w[a, b, c])
结果:
a,
b,
c
a,
b,
c
a: a,b,c
array: a,b,c
a == array?true
A,
B,
C
a,
b,
c
a: A,B,C
array: a,b,c