gets.chomp()与STDIN.gets.chomp()之间有什么区别?

时间:2012-05-09 20:21:26

标签: ruby

它们是相同的,还是两个命令之间存在细微差别?

4 个答案:

答案 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。