あなたはこう言っています:
path.gets
でpathあり、Stringです。getsにメソッドKernelがあります:
gets(sep=$/) → 文字列
gets(limit) → 文字列または nil
gets(sep,limit) → 文字列または nil
(または)$_のファイルのリストから、またはコマンド ラインにファイルが存在しない場合は標準入力から次の行を返します (および に割り当てます)。ARGV$*
StringにはKernelviaが含まれてObjectいるため、gets上記のメソッドは のインスタンス メソッドでもありますString。しかし、Kernel#getsプライベートなのでString#getsプライベートであり、エラーがあります:
private method `gets' called for "file.txt":String (NoMethodError)
gets他の場所で述べたように、あなたは電話をかけたいと思ってfileいます。
Kernel#getsは、多くの (すべての?)メソッドと同様に、素早いワンライナーなどの単純な関数のようにKernel扱うことができるようになっています。getsのワンライナー性Kernel#getsは、 に対して処理を行う理由でもあり$_ます。
この回答は主に背景情報であるため、何が起こっているのかがわかります。彼らは正しく、最初に参加したので、Hckの答えを受け入れることをお勧めします。