它们是相同的,还是两个命令之间存在细微差别?
答案 0 :(得分:37)
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
答案 1 :(得分:23)
gets.chomp()
=先阅读ARGV
STDIN.gets.chomp()
=读取用户的输入
答案 2 :(得分: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的目的那样),get.chomp就不能再正常工作了。是时候引进大炮了:$ stdin.gets.chomp
答案 3 :(得分:4)
,因为 如果ARGV中有东西,默认的获取方法会尝试将第一个视为文件并读取 从那以后。要在这种情况下读取用户的输入(即标准输入),您必须使用 它明确地STDIN.gets。