Завершающий цикл на входе - PullRequest
2 голосов
/ 10 февраля 2012

Я пытаюсь найти способ завершить цикл, когда пользователь нажимает 'x' + Enter.Я хочу, чтобы цикл продолжал работать в фоновом режиме, пока пользователь не отменит его.

Что-то в этом роде:

while gets.chomp != 'x'

    puts 'looping...'

    sleep 1

end

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

1 Ответ

5 голосов
/ 10 февраля 2012

Вы должны использовать темы для этого:

Thread.new do
  while line = STDIN.gets
    break if line.chomp == 'x'
  end
  exit
end

# whatever you want to do in the background
# (or rather in the foreground, actually)
loop do
  puts "foo"
  sleep 1
end

Проблема в том, что STDIN.gets блокирует, поэтому вы не можете сделать что-то еще одновременно, не распараллеливая программу, используя фоновый поток, который проверяет только ввод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...