Как завершить цикл, если пользователь нажимает любую клавишу в Ruby? - PullRequest
0 голосов
/ 01 мая 2018

Как говорит заголовок, я хочу завершить цикл, если пользователь нажмет любую клавишу. Любая клавиша означает, что если пользователь просто нажимает на клавиатуре букву «А» и не нажимает «ввод» после «А», он должен завершить бесконечный цикл. Я провел небольшое исследование и обнаружил, что использование Thread является ключевым моментом для решения этой проблемы. Однако, поскольку я только начал изучать Ruby неделю назад, я просто не знаю, как кодировать tbh.

Thread.new do
  while user_input = STDIN.gets
    break if user_input.chomp == true # dont know what to write here
  end
end

loop do
  random = random_number(0,1)
  puts random
  total = random + total
  count += 1
  sleep 1
end

Это код, который у меня есть сейчас, и, конечно, он не работает .. Мне нужна помощь ... (я беспокоюсь, что поток должен быть завершен с помощью "Enter". Как будто он завершает цикл, когда пользователь нажимает "любую клавишу" и "Enter" .. И это не то, что я хочу)

1 Ответ

0 голосов
/ 01 мая 2018

Здесь есть две проблемы.

  1. Во-первых, gets требует, чтобы вы нажали Enter, когда закончите печатать. Это можно исправить с помощью метода getch из модуля io/console.
  2. Во-вторых, ваша петля не в вашей ветке. break выходит из цикла, оно не уничтожает все запущенные циклы.

Вот очень простая демонстрация того, как это работает:

require 'io/console'

def echo_keyboard_input
    loop do
      char = STDIN.getch
      puts char
      break if char == 'q'
    end
end

t = Thread.new { echo_keyboard_input }    
t.join

Эта программа просто выводит символы, которые вы вводите, вам по одному и завершается, когда вы набираете 'q'. (Я основал это на этом SO ответе .)

Однако, это очень продвинутая вещь, которую стоит попробовать с таким небольшим опытом; Работать с потоками может быть довольно сложно даже для опытных программистов. если вы действительно хотите сосредоточиться на чем-то другом, вам может понадобиться рубиновый камень, который облегчит эту задачу.

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