如果我硬编码下面的变量 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)
注意:错误是通过将获取更改为 STDIN.gets 来解决的,但为什么在没有参数的情况下需要我的程序正常工作?
此外,有没有办法更改整个文件的 STDIN.gets 的默认行为?也许在程序的顶部有一行?
答案 0 :(得分: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
,“只是为了确定”可能更明智。在这种情况下,如果可能出现异常和令人惊讶的行为,那么尽可能明确地编写代码几乎总是最好的。
答案 1 :(得分:0)
您应该使用:
STDIN.gets
尝试获取用户输入时。