1

考虑一个名为的文件weird1.rb

load 'weird2.rb'

weird2.rb

p = gets.chomp
puts "Got input: #{p}"

当我weird1.rb不带任何参数运行时,gets从控制台读取用户的输入:

c:\a\ruby>weird1.rb
test
Got input: test

当我使用参数运行它时,gets从给定的参数中读取(someRandomArgweird2.rb,分别在以下情况下):

c:\a\ruby>weird1.rb someRandomArg
weird2.rb:1:in `gets': No such file or directory - someRandomArg (Errno::ENOENT)

c:\a\ruby>weird1.rb weird2.rb
Got input: p = gets.chomp

为什么weird2从 的论点中读取weird1?这似乎出乎意料;gets应该从stdin而不是文件中读取。发生了什么,我该如何解决?

4

1 回答 1

3

负载部分与它无关。如果您直接调用带有和不带参数的怪异2.rb,也会发生同样的事情。

您看到的效果是获取类似于 unix 过滤器的功能,这意味着如果未指定文件,它将从 STDIN 读取,否则将通过命令行提供文件。

如果您正在通过怪异.rb 进行一些预处理,则在加载怪异2.rb 之前通过 shift 从 ARGV 中删除任何参数,如下所示:

my_arg = ARGV.shift
# do stuff with my_arg
load 'weird2.rb'
于 2013-10-23T02:01:44.047 回答