1

別のルビースクリプトを呼び出すルビースクリプトを作成しました。呼び出し先スクリプトは非常に長く、入力用の「gets」がたくさんあります。

したがって、私が行うことは、UNIXターミナルを開き、呼び出し元スクリプトを呼び出すことです。これにより、次の単純な行が実行されます。

load "calleeScript.rb"

calleeScript.rbは、これを行うために簡略化されています。

input = gets.chomp

print input

しかし、getsを処理できないなど、エラーが発生するだけです。エラーは次のように述べています。

./getsTest.rb:3:in `gets':そのようなファイルまたはディレクトリはありません-5(Errno :: ENOENT)from ./getsTest.rb:3

それを取り出しても、印刷/端末に出力されません。では、あるスクリプトを呼び出してから別のスクリプトを呼び出し(完全な制御を放棄するかフォークする)、いくつかの入力/出力を実行し、それでも前のスクリプトに戻る方法はありますか?

4

1 に答える 1

4

Kernel#getsは、標準入力とファイルの両方を介して入力を処理できる便利な方法です。

引数なしでスクリプトを呼び出す場合、つまり次のようになります。

getsTest.rb

次にKernel#gets、標準入力からその入力を読み取ります。ただし、スクリプトを次のように呼び出す場合:

getsTest.rb foo.txt

次にKernel#gets、という名前のファイルから入力を読み取りますfoo.txt

あなたの場合、Kernel#getsは、という名前のファイルが見つからないと不平を言っている5ので、おそらくスクリプトを次のように呼び出しました。

getsTest.rb 5

特定のソースから読みたい場合はIO#gets、その特定のソースを呼び出す必要があります。電話することをお勧めします

$stdin.gets

注:技術的に言えば、これはの機能ではKernel#getsなく、ARGF魔法の定数の機能です。基本的には、Kernel#getsを呼び出すだけARGF.getsです。

于 2012-06-07T23:51:24.703 に答える