.map在下面做什么:
params = (0...param_count).map
.map在下面做什么:
params = (0...param_count).map
当前回答
对于任何需要形象化的人来说:
完整的故事如下:
https://richstone.io/rubys-map-collect-methods-explained-visually/
其他回答
0 . .Param_count表示“直到并包括Param_count”。 0…Param_count表示“直到但不包括Param_count”。
Range#map并不返回一个Enumerable,它实际上是将它映射到一个数组。它与Range#to_a相同。
map方法接受一个可枚举对象和一个block,并为每个元素运行block,输出block中的每个返回值(除非使用map!否则原始对象是不变的):
[1, 2, 3].map { |n| n * n } #=> [1, 4, 9]
Array和Range是可枚举类型。map使用block返回Array。地图!改变原始数组。
这有什么用,和地图有什么区别!和每一个吗?这里有一个例子:
names = ['danil', 'edmund']
# here we map one array to another, convert each element by some rule
names.map! {|name| name.capitalize } # now names contains ['Danil', 'Edmund']
names.each { |name| puts name + ' is a programmer' } # here we just do something with each element
输出:
Danil is a programmer
Edmund is a programmer
Map是可枚举模块的一部分。和“collect”非常相似。
Class Car
attr_accessor :name, :model, :year
Def initialize (make, model, year)
@make, @model, @year = make, model, year
end
end
list = []
list << Car.new("Honda", "Accord", 2016)
list << Car.new("Toyota", "Camry", 2015)
list << Car.new("Nissan", "Altima", 2014)
p list.map {|p| p.model}
Map提供了通过块参数返回的数组迭代的值。
对于任何需要形象化的人来说:
完整的故事如下:
https://richstone.io/rubys-map-collect-methods-explained-visually/
使用ruby 2.4,你可以使用transform_values完成同样的事情,这个特性是从rails提取到ruby的。
h = {a: 1, b: 2, c: 3}
h.transform_values { |v| v * 10 }
#=> {a: 10, b: 20, c: 30}