each
不同于map
和collect
,但map
和collect
是相同的(从技术上说,map
是collect
的别名,但根据我的经验,map
的使用频率要高得多).
each
为(Enumerable
)接收器中的每个元件执行封闭块:
[1,2,3,4].each {|n| puts n*2}
# Outputs:
# 2
# 4
# 6
# 8
map
和collect
生成一个新的Array
,其中包含应用于接收器每个元素的块的结果:
[1,2,3,4].map {|n| n*2}
# => [2,4,6,8]
也有map!
/collect!
定义在Array
上;它们在适当的位置修改接收器:
a = [1,2,3,4]
a.map {|n| n*2} # => [2,4,6,8]
puts a.inspect # prints: "[1,2,3,4]"
a.map! {|n| n+1}
puts a.inspect # prints: "[2,3,4,5]"