当我在Sublime文本中运行此代码时,它会进入无限循环,而不是提示用户"输入某些内容"。
print 'Enter something'
input_user = gets.strip
if(input_user == 'something')
puts 'You are smart'
else
puts 'You are not'
end
- 有人可以帮我理解为什么会发生这种情况吗?
- 除了
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
方法来捕获、存储和操作该输入。