37

それらは同じですか、それとも2つのコマンドの間に微妙な違いがありますか?

4

4 に答える 4

42

getsを使用しますKernel#gets。これは、を介して渡されたファイルの内容を最初に読み取ろうとしますARGV。にファイルがない場合はARGV、代わりに標準入力が使用されます(この時点では。と同じSTDIN.getsです。

注:echristophersonが指摘したように、実際にはではなく、Kernel#getsにフォールバックします。ただし、別の入力ストリームに割り当てない限り、デフォルトでは同じになります。$stdinSTDIN$stdinSTDIN

http://www.ruby-doc.org/core-1.9.3/Kernel.html#method-i-gets

于 2012-05-09T20:27:30.400 に答える
29

gets.chomp()ARGV=最初に読む

STDIN.gets.chomp()=ユーザーの入力を読み取る

于 2013-11-05T21:21:15.770 に答える
8

color.rbファイルが

first, second, third = ARGV

puts "Your first fav color is: #{first}"
puts "Your second fav color is: #{second}"
puts "Your third fav color is: #{third}"

puts "what is your least fav color?"
least_fav_color = gets.chomp

puts "ok, i get it, you don't like #{least_fav_color} ?"

そしてあなたはターミナルで走ります

$ ruby color.rb blue yellow green

エラーをスローします(そのようなファイルエラーはありません)

次の行で「gets.chomp」を「stdin.gets.chomp」に置き換えます。

least_fav_color = $stdin.gets.chomp

ターミナルで次のコマンドを実行します

$ ruby color.rb blue yellow green

その後、プログラムが実行されます!!

基本的に、(ARGVが設計されているように)最初からARGVの呼び出しを開始すると、gets.chompはそのジョブを適切に実行できなくなります。大きな大砲を持ち込む時間:$ stdin.gets.chomp

于 2017-02-19T01:49:19.617 に答える
4

ARGVに何かがある場合、デフォルトのgetsメソッドは最初のものをファイルとして扱い、そこから読み取ろうとするためです。このような状況でユーザーの入力(つまり、stdin)から読み取るには、STDIN.getsを明示的に使用する必要があります。

于 2014-02-20T12:30:33.153 に答える