使用 get 接受用户输入会导致崇高文本中的无限循环



当我在Sublime文本中运行此代码时,它会进入无限循环,而不是提示用户"输入某些内容"。

print 'Enter something'
input_user = gets.strip
if(input_user == 'something')
puts 'You are smart'
else
puts 'You are not'
end
  1. 有人可以帮我理解为什么会发生这种情况吗?
  2. 除了gets(不使用第三方库(之外,还有其他有效的方法来接受 ruby 中的用户输入吗?

Sublime不允许输入数据,所以它看起来像一个无限循环。 此外,您看不到Enter something因为输出是"在流上排队"。您需要刷新输出才能看到它。看看这个主题: 如何立即打印标准输出?

因此,要查看在Sublime中打印的第一行,请在print(puts(之后添加STDOUT.flush

puts 'Enter something'
STDOUT.flush
input_user = gets.strip

现在,如果你从Sublime(CMD + B(构建,你可以看到打印的第一行,但执行仍然挂起,因为Sublime没有拾取输入。

为了在终端上进行正确的测试运行,即使没有刷新,它也能正常工作。

没有明显的理由说明为什么这段代码应该锁定到无限循环中。我跑它只是为了在ruby 2.4.1p111下踢球.代码按照描述的期望运行,没有无限循环。

这不是一个无限循环。它只是在等待输入数据。

这是CLI 应用程序要求用户输入的基本流程:

并且还使用#gets方法来捕获、存储和操作该输入。

最新更新