为什么使用map方法时需要times方法?
Why is the times method needed when using the map method?
我对 "map" 方法的用法有疑问。为什么我在第 9 行得到 "No Method Error" ? Ruby 抱怨有一个名为 "map" 的未定义方法,在做了一些研究之后,我看到了一小段使用 "times" 方法的代码。令人惊讶的是,我的代码可以正常工作。但是,我对为什么需要使用时间感到困惑。
我最初的第 9 行语句是
nameArray = num.map do |x|
这不行,但为什么需要时间方法。为什么我不能使用 num 来显示我想在 x 上迭代 map 多少次?使用时间是访问地图方法的唯一方法吗?我很困惑...
下面是工作代码,只更改了第 9 行。
def Array_Maker
puts "How many people would you like to enter? : "
num = gets.chomp.to_i
nameArray = Array.new(num)
puts "\nEnter the names of the people you wish to add: "
nameArray = num.times.map do |x|
gets.chomp.to_s
end
nameArray.each do |x|
puts x
end
end
Array_Maker()
map
方法适用于 Enumerable class 但是您是在 Fixnum 上使用它。因此错误。
Fixnum 没有实例方法map
。这里:(感谢 Cary :))
Fixnum.instance_methods.include?(:map)
# => false
在这里参考 Enumerable#map: http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-map
当您执行 num.times
时,您正在将 num
(Fixnum) 转换为 Enumerator class。这里:
num = 1
num.times
# => #<Enumerator: 1:times>
num.times.class
# => Enumerator
由于 Enumerator class 旨在允许迭代,因此 map
是此 class 的有效方法。因此 num.times.map
.
没有错误
更新
之前我提到过 map
方法是针对数组 class 的。这虽然是正确的,但正如 Cary 指出的那样,这只是 Enumerable class 的一个简单实现。因此我相应地更新了我的答案。
我对 "map" 方法的用法有疑问。为什么我在第 9 行得到 "No Method Error" ? Ruby 抱怨有一个名为 "map" 的未定义方法,在做了一些研究之后,我看到了一小段使用 "times" 方法的代码。令人惊讶的是,我的代码可以正常工作。但是,我对为什么需要使用时间感到困惑。
我最初的第 9 行语句是
nameArray = num.map do |x|
这不行,但为什么需要时间方法。为什么我不能使用 num 来显示我想在 x 上迭代 map 多少次?使用时间是访问地图方法的唯一方法吗?我很困惑...
下面是工作代码,只更改了第 9 行。
def Array_Maker
puts "How many people would you like to enter? : "
num = gets.chomp.to_i
nameArray = Array.new(num)
puts "\nEnter the names of the people you wish to add: "
nameArray = num.times.map do |x|
gets.chomp.to_s
end
nameArray.each do |x|
puts x
end
end
Array_Maker()
map
方法适用于 Enumerable class 但是您是在 Fixnum 上使用它。因此错误。
Fixnum 没有实例方法map
。这里:(感谢 Cary :))
Fixnum.instance_methods.include?(:map)
# => false
在这里参考 Enumerable#map: http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-map
当您执行 num.times
时,您正在将 num
(Fixnum) 转换为 Enumerator class。这里:
num = 1
num.times
# => #<Enumerator: 1:times>
num.times.class
# => Enumerator
由于 Enumerator class 旨在允许迭代,因此 map
是此 class 的有效方法。因此 num.times.map
.
更新
之前我提到过 map
方法是针对数组 class 的。这虽然是正确的,但正如 Cary 指出的那样,这只是 Enumerable class 的一个简单实现。因此我相应地更新了我的答案。