我对“地图”方法的使用有疑问。为什么我在第9行得到“No Method Error”? Ruby抱怨说有一个名为“map”的未定义方法,在做了一些研究后,我看到了一小段使用“times”方法的代码。令人惊讶的是,我得到了代码。但是,我很困惑为什么我需要使用时间。
我原来的第9行声明是
nameArray = num.map do |x|
这不起作用,但为什么需要时间方法。为什么我只是不能使用num来显示我想在x上映射迭代的次数?使用times是访问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()
答案 0 :(得分:1)
map
方法适用于Enumerable类,但是您在Fixnum上使用它。因此错误。
Fixnum没有实例方法map
。在这里:(感谢Cary:))
Fixnum.instance_methods.include?(:map)
# => false
请参阅此处的可枚举#map:http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-map
当您执行num.times
时,您正在将num
(Fixnum)转换为Enumerator课程。这里:
num = 1
num.times
# => #<Enumerator: 1:times>
num.times.class
# => Enumerator
由于Enumerator类允许迭代,map
是此类的有效方法。因此,num.times.map
没有错误。
<强>更新强>
之前我曾提到map
方法适用于Array类。虽然这是正确的,但正如Cary指出的那样只是 Enumerable类的简单实现。因此,我已相应更新了我的答案。