1

如果我硬编码下面的变量max,我的程序运行没有问题。如果我传入一个参数,max 设置正确但会抛出和错误。这是为什么?

max = ARGV[0].to_i

# Ask user for first guess
puts "I am thinking of a number between 1 and " + max.to_s + "."
print "Make your guess: "
guess = gets.chomp.to_i

抛出错误:`gets':没有这样的文件或目录(Errno::ENOENT)

注意:错误是通过将gets更改为STDIN.gets来修复的,但是为什么在没有参数的情况下我的程序可以正常工作?

此外,有没有办法将gets的默认行为更改为整个文件的STDIN.gets ?也许在程序顶部有一行?

4

2 回答 2

2

Kernel.gets有一些有趣的行为可以解释您的问题:

http://www.ruby-doc.org/core-1.9.3/Kernel.html#method-i-gets

具体来说,它的行为取决于是否ARGV为空,如果它为空,那么它的行为将与STDIN.gets. 如果您不想STDIN.gets显式使用,则可以max = ARGV.shift在调用之前使用删除该元素gets

解决你的最后一个问题:强制gets' 行为匹配的最佳方法STDIN.gets可能ARGV是在做任何其他事情之前确保它是空的,并确保它保持这种状态。但是,继续简单地使用STDIN.gets“只是为了确定”可能更明智。在这种情况下,可能出现异常和令人惊讶的行为,几乎总是最好尽可能明确地编写代码。

于 2013-02-12T00:07:48.237 回答
0

你应该使用:

STDIN.gets

尝试获取用户输入时。

于 2013-02-12T00:08:26.047 回答