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

标签 ruby syntax undefined

我不知道为什么,但它一直说 prime?(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

最佳答案

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

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

您还可以用更“Ruby-ish”的方式定义 prime?:

def prime? num
  if num == 1
    false
  else
    (2..Math.sqrt(num)).all? { |i| i % num != 0 }
  end
end

Enumerable#all? 的文档

关于ruby - ruby 语法中的未定义方法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9730501/

相关文章:

ruby-on-rails - 如何在 Ruby 1.9.2 中将一级数组拆分为多个数组

ruby - 参数化数组#uniq(即uniq_by)

c++ - C++ 是上下文无关的还是上下文敏感的?

sql-server - sql server management studio 语法

javascript - CloudBoost:CloudObject 中的未定义列

php - 在 PHP 中使用 pathinfo 的未定义路径扩展

datatables - 如何使用DataTables fnDestroy方法

ruby-on-rails - 通过带作用域的关联保存时丢失属性 (Rails 4.0.0)

list - Python 2.7 如果没有任何语法?

ruby - 有没有办法在终端 : -bash: HOME/. rvm/scripts/rvm : No such file or directory? 中修复此错误