它们是相同的,还是两个命令之间存在细微差别?
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
它会抛出一个错误(没有这样的文件错误)
现在在下面的行中用“stdin.gets.chomp”替换“gets.chomp”
least_fav_color = $stdin.gets.chomp
并在终端中运行以下命令
$ ruby color.rb blue yellow green
然后你的程序运行!
基本上,一旦您从一开始就开始调用 ARGV(正如 ARGV 设计的那样),gets.chomp 就不能再正常工作了。是时候引入大炮了:$stdin.gets.chomp
因为如果 ARGV 中有东西,默认的 gets 方法会尝试将第一个文件视为文件并从中读取。在这种情况下,要从用户的输入(即标准输入)中读取,您必须明确使用它 STDIN.gets。