2013-09-12 5 views
5

Мой код выглядит следующим образом. Если я удалю последний end, он скажет unexpected end of input, если я положил end, он говорит unexpected keyword end. Я не вижу ничего плохого в следующем коде. Ты можешь?Ruby неожиданный конец ключевого слова, И неожиданный конец ввода

n = gets.chomp.to_i 
array= Array.new(n, true) 
while p<Math::sqrt(n) do 
    i=p 
    while (i<=n) do 
    array[i] = false # not a prime 
    i+=p 
    end 
    while array[p]!=true do 
    p++ 
    end 
end 

ответ

17

Оператор инкремента (++):

p++ 

не существует в Ruby. Вы имели в виду:

p += 1 
+2

Вы правы. однако это никоим образом не делает это хорошим сообщением об ошибке :( – mnagel

+2

@mnagel вы не можете обвинять Ruby в этом. Ruby не может обрабатывать 'end' после' + '. Это проблема, с которой правильно исправляет ошибку Пользователь должен знать правильный синтаксис, он дает строку, на которой происходит ошибка. Это должно помочь вам отладить проблему. – Mischa

+0

@ Миша, однако, с точки зрения удобства использования предупреждение «мы просто разбирали' + '(унарный плюс) после '+' (двоичный плюс), и, хотя это не ошибка, она не делает то, что вы хотите, чтобы это сделать ». Конечно, это нарушает обратную совместимость с' + - ++ --- +++ 1+ + 2 == 3' – mnagel

Смежные вопросы