【问题标题】:How to terminate the loop if user press any key in Ruby?如果用户在 Ruby 中按任意键,如何终止循环?
【发布时间】:2018-10-11 07:09:49
【问题描述】:

正如标题所说,如果用户按任意键,我想终止循环。 任何键意味着如果用户只是按键盘字母“A”而不在“A”之后按“输入”,它应该终止无限循环。我做了一点研究,发现使用 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”时它会终止循环。这不是我想要的)

【问题讨论】:

    标签: ruby loops terminate


    【解决方案1】:

    这里有两个问题。

    1. 首先是gets 要求您在完成输入后按回车键。您可以使用 io/console 模块中的 getch 方法解决此问题。
    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”时退出。 (我基于this SO answer。)

    但是,在如此少的经验下尝试这是一件非常先进的事情;即使对于有经验的程序员来说,使用线程也可能非常棘手。如果你真的想专注于其他事情,你可能想找一颗红宝石来让这件事变得更容易。

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多