ruby语法中的未定义方法错误

时间:2012-03-16 01:09:57

标签: ruby syntax undefined

我不知道为什么但它一直说素数?(num)方法没有定义...
我试图让它找到素数在1到20之间的乘积

class LCM200        
  def prime?(num)
    if num == 1 then 
        return false
    end
    range = Math.sqrt(num)
    for i in 2..range           
        if num%i == 0
            return false
        end     
        return true
    end
  end
#if __FILE__ == $0
  lcm = 1
  for j in 1..20 do
    if prime?(j)
      lcm *= j
    end
  end       
  puts lcm
#end
end

2 个答案:

答案 0 :(得分:3)

问题是因为您在类中运行代码。在类中,prime?被定义为类的实例方法,但是当您在类中运行for循环时,您正在调用{{1}好像它是类方法(又名静态方法)。要修复它,只需删除类声明:

prime?

您还可以在更多" Ruby-ish"中定义def prime?(num) if num == 1 then return false end range = Math.sqrt(num) for i in 2..range if num%i == 0 return false end end # Note: moved return true to here since otherwise it would return # true after a single iteration return true end lcm = 1 for j in 1..20 do if prime?(j) lcm *= j end end puts lcm 。方式:

prime?

Enumerable#all?

的文档

答案 1 :(得分:1)

您无需定义自己的prime?功能。从Ruby 1.9开始,您只需调用 mathn 库的prime?函数,如下所示:

  • require 'mathn'
  • 13.prime?

此实例的一个例子:

$ irb
irb(main):001:0> require 'mathn'
=> true
irb(main):002:0> 1.prime?
=> false
irb(main):003:0> 3.prime?
=> true
irb(main):004:0> 11.prime?
=> true
irb(main):005:0> 20.prime?
=> false