【问题标题】:Problems with Modulo operator Ruby: Why am I getting "undefined method `%' for 1..100:Range"?模运算符 Ruby 的问题:为什么我得到“1..100:Range 的未定义方法 `%'”?
【发布时间】:2014-06-05 20:36:10
【问题描述】:

由于某种原因,我在运行以下代码时收到错误 undefined method '%' for 1..100:Range

[1..100].each do |x|
  if x % 3 == 0 && x % 5 == 0
    puts "CracklePop"
  elsif x % 3 == 0
    puts "Crackle"
  elsif x % 5 == 0
    puts "Pop"
  else
    puts x
  end
end

知道发生了什么吗?非常感谢任何帮助。

【问题讨论】:

标签: ruby modulo


【解决方案1】:

这是错误的范围语法。

您已经创建了一个包含 1 个元素的数组,该元素本身就是1..100 的范围。你写的相当于[(1.100)]。您正在迭代 outer 数组一次,并将 x 设置为 (1..100)

您需要(1..100).each,它在范围上调用each,而不是在包含范围的数组上。

【讨论】:

    【解决方案2】:

    通过执行[1..100],您不是在循环from 1 to 100,而是在1..100,这是一个Range 对象,您真正想要做的是:-

     (1..100).step do |x|
     if x % 3 == 0 && x % 5 == 0
         puts "CracklePop"
     elsif x % 3 == 0
         puts "Crackle"
     elsif x % 5 == 0
         puts "Pop"
     else
         puts x
     end
     end
    

    基本上,Range 表示一个区间,您可以按照 here 的说明对 Range 进行迭代,按照 here 的说明从 Range 创建一个数组,有关范围的更多详细信息可以在 here 找到。

    【讨论】:

      【解决方案3】:

      正如它所说的那样。 1..100 没有方法 %。表达式(1..100) % 3 未定义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-12
        • 1970-01-01
        • 2013-04-24
        相关资源
        最近更新 更多