未定义的方法`+ @'表示false:FalseClass(NoMethodError)ruby

时间:2010-08-23 14:52:59

标签: ruby undefined

def next_prime_number (last_known_prime)
  while true
    last_known_prime++

    found_factor = false # ERROR
    for i in 1...last_known_prime
      if last_known_prime % i == 0
        found_factor = true
        break
      end
    end
    if !found_factor
      puts "new prime: #{last_known_prime}"
      Kernel.exit
    end
  end
end

in `next_prime_number': undefined method `+@' for false:FalseClass (NoMethodError)

我收到了上述错误并且完全难倒了。任何想法(不,这不是家庭作业,我试图通过欧拉项目自学Ruby)。

2 个答案:

答案 0 :(得分:4)

正如mikej所说,ruby中没有后增量(++)运算符。但是,有一个一元加(拼写+@定义时)

last_known_prime++

found_factor = false

被解析为

之类的东西
last_known_prime + (+(found_factor = false))

--------------------^ unary plus on false

导致你的神秘错误。

答案 1 :(得分:3)

没有++运算符用于在Ruby中递增整数,因此请尝试将last_known_prime++替换为last_known_prime = last_known_prime + 1

这将解决您所看到的错误。在此之后你的程序还有另一个问题,但我不会破坏你自己解决欧拉问题的尝试。