Ruby 在不中断程序执行的情况下读取用户输入

Ruby 在不中断程序执行的情况下读取用户输入,ruby,Ruby,我试图用ruby做一个循环,每秒显示一个+1的数字。我希望用户能够在需要时输入。问题是我必须输入一些东西才能继续循环。对不起,我的英语不好 p、 s im使用在线编译器(repl.it)使用线程和一些简单的状态变量在线程之间通信,您可以完成您想要的任务 在本例中,当结束计数循环时,我们使用变量@stop从主线程向计数线程发送信号 此示例直接作用于repl.it: 希望这能给你一些关于如何继续的想法 @stop = false thr = Thread.new { puts "Counti

我试图用ruby做一个循环,每秒显示一个+1的数字。我希望用户能够在需要时输入。问题是我必须输入一些东西才能继续循环。对不起,我的英语不好


p、 s im使用在线编译器(repl.it)

使用线程和一些简单的状态变量在线程之间通信,您可以完成您想要的任务

在本例中,当结束计数循环时,我们使用变量
@stop
从主线程向计数线程发送信号

此示例直接作用于repl.it:

希望这能给你一些关于如何继续的想法

@stop = false

thr = Thread.new {
  puts "Counting thread starting..."
  i = 0

  loop {
    i += 1
    puts i
    sleep 1
    break if @stop
  }

  puts "Counting thread exit..."
}

loop {
  puts "\nWaiting for input...\nType 'stop' to exit..."
  input = gets.chomp

  if input == "stop"
    puts "Stopping..."
    @stop = true
    break
  end
}

# Wait for counting thread to end
thr.join
puts "Main program exit..."

您可以使用线程和一些简单的状态变量在线程之间进行通信来完成您想要的任务

在本例中,当结束计数循环时,我们使用变量
@stop
从主线程向计数线程发送信号

此示例直接作用于repl.it:

希望这能给你一些关于如何继续的想法

@stop = false

thr = Thread.new {
  puts "Counting thread starting..."
  i = 0

  loop {
    i += 1
    puts i
    sleep 1
    break if @stop
  }

  puts "Counting thread exit..."
}

loop {
  puts "\nWaiting for input...\nType 'stop' to exit..."
  input = gets.chomp

  if input == "stop"
    puts "Stopping..."
    @stop = true
    break
  end
}

# Wait for counting thread to end
thr.join
puts "Main program exit..."

在Unix终端上使用Ruby可以做到这一点,但我怀疑您能否使用repl.It实现这一点,因为它需要对tty接口进行更低级的访问,而通过repl.It(可能)是不可能的。另一种解决方案是使用线程。请提供一些示例代码和您希望发生的事情的描述。“我希望用户能够在需要时输入。”您的意思是什么?你能提供一个带有伪代码的例子吗?我试图显示每秒钟增加一个的ex:Number:1。为了做到这一点,我使用了一个循环,但我希望用户能够随时输入输入,但我希望数字继续增加抱歉,我有困难解释如果我尝试将“get”放入循环中,循环将停止,直到我输入一些内容,但我只希望它忽略“get”除非我输入一些东西,否则在Unix终端上用Ruby是不可能做到这一点的,但我怀疑你用repl.it能做到这一点,因为它需要对tty接口进行更低级的访问,而通过repl.it(可能)是不可能的。另一个解决方案是使用线程。请提供一些示例代码和您希望发生的事情的描述。“我希望用户能够在需要时输入。”您的意思是什么?你能提供一个带有伪代码的例子吗?我试图显示每秒钟增加一个的ex:Number:1。为了做到这一点,我使用了一个循环,但我希望用户能够随时输入输入,但我希望数字继续增加抱歉,我有困难解释如果我尝试将“get”放入循环中,循环将停止,直到我输入一些内容,但我只希望它忽略“get”除非我输入点什么,伙计,这就是我要找的。令人印象深刻的是,人们在这个网站上的回复速度是如此之快:)@SamuelFyckes Great:)记住,如果答案对你有效,请批准它,这样其他人也可以看到它。谢谢,谢谢,伙计,这就是我要找的。令人印象深刻的是,人们在这个网站上的回复速度是如此之快:)@SamuelFyckes Great:)记住,如果答案对你有效,请批准它,这样其他人也可以看到它。谢谢