Ruby参数错误

时间:2013-02-12 00:02:13

标签: ruby argument-passing

如果我硬编码下面的变量 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 的默认行为?也许在程序的顶部有一行?

2 个答案:

答案 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

尝试获取用户输入时。