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

ロード部分は関係ありません。引数を指定して、または指定せずに、bird2.rb を直接呼び出すと、同じことが起こるはずです。

あなたが見ている効果は、UNIXフィルターのような関数を取得することです。つまり、ファイルが指定されていない場合はSTDINから読み取り、そうでない場合はコマンドラインから提供されたファイルを読み取ります。

変な.rbを介して前処理を行っている場合は、次のように、変な2.rbをロードする前に、シフトを介してARGVからすべての引数を削除します:

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