Неопределенный метод `+ @ 'для false: FalseClass (NoMethodError) ruby - PullRequest
2 голосов
/ 23 августа 2010
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)

Я получаю вышеуказанную ошибку, и я в полном замешательстве. Любые идеи (нет, это не домашнее задание, я пытаюсь научить себя Руби через проект Эйлера).

Ответы [ 2 ]

4 голосов
/ 23 августа 2010

Как сказал mikej, в ruby ​​нет оператора пост-инкремента (++).Однако есть унарный плюс (пишется +@ при определении)

last_known_prime++

found_factor = false

, который анализируется как что-то вроде

last_known_prime + (+(found_factor = false))

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

, что вызывает вашу загадочную ошибку.

3 голосов
/ 23 августа 2010

В Ruby нет оператора ++ для увеличения целого числа, поэтому попробуйте заменить last_known_prime++ на last_known_prime = last_known_prime + 1.

Это исправит ошибку, которую вы видите. После этого в вашей программе возникла другая проблема, но я не испорчу вашу попытку решить проблему Эйлера самостоятельно.

...