2013-06-08 3 views
1

Это фрагмент из большого куска кода:Почему? бросая ошибку аргумента?

print "> " 
$next_move = gets.chomp 

case $next_move.include? 
when "instructions" 
    puts "$next_move is instructions" 
else 
    puts "$next_move is NOT instructions" 
end 

Everytime я запустить его в терминале, правильно ли я с помощью рубин 1.8.7, 1.9.3 или 2.0.0, я получаю следующая ошибка:

test.rb:4:in `include?': wrong number of arguments (0 for 1) (ArgumentError) 
from test.rb:4 

Этот код работал прошлой ночью на другом компьютере.

Не include? проверяет содержимое этой глобальной переменной? Какой еще аргумент я должен передать ему?

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

+0

«Этот код работал прошлой ночью на другом компьютере». ошибка ... нет. :-) Скорее, 'case" next_move ".include? «инструкции», или «case» next_move «когда« инструкции »'. –

+1

Будьте очень осторожны, используя глобальные переменные: '$ next_move'. Они редко нужны в коде Ruby и, в большинстве случаев, являются предупреждающим знаком о том, что вы делаете что-то неправильно. –

+0

@tinman, спасибо. С тех пор я улучшил свое кодирование, чтобы избежать их. Это упражнение с нескольких недель назад, которое все еще озадачивает меня. Несмотря на то, что Денис не верит мне, честно говоря, все, что я сделал, это запустить код на другом компьютере, и внезапно все, что сработало, больше не работает ... – user2448377

ответ

2

http://www.ruby-doc.org/core-1.9.3/String.html#method-i-include-3F

Returns true if str contains the given string or character.

Это означает, что он требует ровно один аргумент, так что не удивительно, что она бросает ArgumentError при вызове без аргументов.

Поэтому код должен быть:

if $next_move.include? 'instructions' 
    puts '$next_move is instructions' 
else 
    puts '$next move is NOT instructions' 
end 
+0

«Кроме того, вы вызываете include? Not on string contains в переменной next_move, но в строке 'next_move'. " А? Как это работает? Как я НЕ призываю содержимое переменной? – user2448377

+0

Вы сделали это в первой версии своего вопроса. –

0

-то должно было измениться между двумя компьютерами вы тестируемых это на. Если вы желаете, чтобы использовать это в качестве примера заявление, вы, вероятно, что-то вдоль линий:

next_move = 'instructions' 

case next_move 
when "instructions" 
    puts "$next_move is instructions" 
else 
    puts "$next_move is NOT instructions" 
end 

В частности, это проверяет, если next_move IS инструкции. Как если/другое заявление:

if next_move.include? 'instructions' 
    puts "$next_move is instructions" 
else 
    puts "$next_move is NOT instructions" 
end 

См eval.in для получения дополнительной информации.

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