Ruby .gets不起作用

时间:2013-06-29 07:33:20

标签: ruby sublimetext2 user-input

我正在尝试在Ruby中获得简单的用户输入,但我无法使其正常工作。我正在使用gets方法,但程序永远不会停止向我询问输入。我使用Sublime Text 2作为我的文本编辑器,我也在其中运行程序(如果这有所不同)。

这是我的代码:

puts "What is your name?"
name = gets 
puts "Hello " + name + ". How are you?"

这是给我的错误(和输出):

C:/Users/Sten Sootla/Desktop/Ruby workspace/exercise.rb:3:in `+': can't convert nil into String (TypeError)
from C:/Users/Sten Sootla/Desktop/Ruby workspace/exercise.rb:3:in `'
What is your name?
[Finished in 0.1s with exit code 1]

为什么程序不停止向我询问输入?

3 个答案:

答案 0 :(得分:2)

尝试使用$stdin.gets而不是普通的gets,这会强制输入来自stdin

答案 1 :(得分:1)

以下是我的理解方式。 getsputsIO的实例方法,默认IO$stdout$stdin

只有当翻译人员能够处理stdout / in时才会调用gets / puts。 IRB

如果你从bash运行ruby文件,它也可以。

io_test.rb

puts gets

在bash中

ruby io_test.rb

然后它将“放入”stdout,无论它从stdin“获取”。

答案 2 :(得分:0)

如果您想在ST2中运行代码,请查看可通过SublimeREPL获得的Package Control插件。虽然您可以使用IRB,但它的主要Ruby接口是通过pry,它更强大。您可以将它用作经典的REPL(想想Clojure或LISP),也可以通过选择,行范围或块将代码从一个选项卡传输到另一个选项卡中的正在运行的REPL。

有趣的是,上面的代码对我来说是IRB,但出于某种原因却不是pry - 它正在读取我的$EDITOR环境变量,该变量设置为subl -w但是失败Errno::ENOENT: No such file or directory - subl -w。奇怪...

无论如何,我强烈推荐SublimeREPL,因为它是一个非常强大的工具,并且在ST2中是自包含的,因此您无需在终端上来回翻转,保存和重新加载程序。