それらは同じですか、それとも2つのコマンドの間に微妙な違いがありますか?
4 に答える
gets
を使用しますKernel#gets
。これは、を介して渡されたファイルの内容を最初に読み取ろうとしますARGV
。にファイルがない場合はARGV
、代わりに標準入力が使用されます(この時点では。と同じSTDIN.gets
です。
注:echristophersonが指摘したように、実際にはではなく、Kernel#gets
にフォールバックします。ただし、別の入力ストリームに割り当てない限り、デフォルトでは同じになります。$stdin
STDIN
$stdin
STDIN
http://www.ruby-doc.org/core-1.9.3/Kernel.html#method-i-gets
gets.chomp()
ARGV
=最初に読む
STDIN.gets.chomp()
=ユーザーの入力を読み取る
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
ARGVに何かがある場合、デフォルトのgetsメソッドは最初のものをファイルとして扱い、そこから読み取ろうとするためです。このような状況でユーザーの入力(つまり、stdin)から読み取るには、STDIN.getsを明示的に使用する必要があります。