Попытка перейти на определенный шаг после его завершения в рубине - PullRequest
0 голосов
/ 19 сентября 2010

Хорошо. Я хочу, чтобы произошло следующее, вот пример:

puts "what would you like to see?"
var = gets.chomp
if var == "z"
  puts "this"

elsif var == "d"
  puts "stack"

elsif var == "y"
  puts "overflow"

else
  puts "I don't understand that."

end

В настоящее время все работает нормально, пока я не хочу, чтобы пользователь переопределил 'var'. В настоящее время все циклы просто зацикливают путы из elsif - я хочу, чтобы он снова запросил ввод пользователя, а затем распечатал elsif. Например:
Пользователь вводит y, код должен сказать overflow, а затем вернуться к строке 1. Любая помощь будет потрясающей.

Ответы [ 2 ]

3 голосов
/ 19 сентября 2010

gets возвращает nil, когда нет ввода, и поскольку nil оценивается как ложное в условном выражении, вы можете использовать gets в цикле, например:

while var = gets
  var.chomp!
  if var == "z" # use == to test equality, not =
    # do stuff
  elsif var == "x"
    # do stuff
  ....
end # while

Вы можетенайти это работает лучше с case оператором:

while var = gets
  case var.chomp
  when "z"
    puts "this"
  when "d"
    puts "stack"
  when "y"
    puts "overflow"
  else
    puts "I don't understand that."
  end # case
end # while
1 голос
/ 19 сентября 2010

Вы используете оператор присваивания (=), где вы хотите проверить равенство (==), я думаю.

Вы также можете использовать case, но вот версия с while и if

print "Gimme an answer ('q' to quit) >> "
response = gets.chomp

while response != 'q'
  if response == 'z'
    puts "this"
  elsif response == 'd'
    puts "stack"
  elsif response == 'y'
    puts "overflow"
  else
    puts "I don't understand that."
  end

  print "Gimme another answer ('q' to quit) >> "
  response = gets.chomp
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...