如果用户按下Ruby中的任何键,如何终止循环?

时间:2018-05-01 08:05:12

标签: ruby loops terminate

正如标题所说,如果用户按任意键,我想终止循环。 任何关键意味着如果用户只需按下键盘字母'A'而不是在'A'后按'enter',它应该终止无限循环。我做了很少的研究,发现使用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

这是我现在的代码,当然它不起作用.. 我需要帮助......(我担心Thread必须使用'Enter'来完成。就像当用户按'任意键'和'输入'时它终止循环..这不是我想要的那样。

1 个答案:

答案 0 :(得分:0)

这里有两个问题。

  1. 首先,gets要求您在完成输入后按Enter键。您可以使用getch模块中的io/console方法解决此问题。
  2. 第二个是你的循环不在你的线程中。 break从循环中逃脱,它不会杀死所有正在运行的循环。
  3. 以下是一个非常简单的演示,说明了它的工作原理:

    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”时退出。 (我的基础是this SO answer。)

    然而,这是一个非常先进的事情,尝试这么少的经验;即使对于有经验的程序员来说,线程也很难处理。如果你真的想专注于其他事情,你可能想找到一个更容易的红宝石宝石。