Ruby 什么';get.chomp()与STDIN.get.chomp()之间的区别是什么?

Ruby 什么';get.chomp()与STDIN.get.chomp()之间的区别是什么?,ruby,Ruby,这两个命令是相同的,还是有细微的区别 gets将使用内核#gets,它首先尝试读取通过ARGV传入的文件的内容。如果ARGV中没有文件,它将使用标准输入(此时与STDIN.get相同) 注意:正如埃奇里斯托弗森指出的那样,内核#gets实际上会退回到$stdin,而不是stdin。但是,除非您将$stdin分配给不同的输入流,否则默认情况下它将与stdin相同 首先读取.chomp()=readARGV STDIN.gets.chomp()=读取用户的输入 如果ARGV中有内容,默认的get方法

这两个命令是相同的,还是有细微的区别

gets
将使用
内核#gets
,它首先尝试读取通过
ARGV
传入的文件的内容。如果
ARGV
中没有文件,它将使用标准输入(此时与
STDIN.get
相同)

注意:正如埃奇里斯托弗森指出的那样,
内核#gets
实际上会退回到
$stdin
,而不是
stdin
。但是,除非您将
$stdin
分配给不同的输入流,否则默认情况下它将与
stdin
相同

首先读取.chomp()
=read
ARGV

STDIN.gets.chomp()
=读取用户的输入 如果ARGV中有内容,默认的get方法会尝试将第一个作为文件处理并读取 在这种情况下,要读取用户的输入(即stdin),必须使用
如果您的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

谢谢你的解释。很难通过文档中的差异找到答案。它不是又回到了$stdin了吗,它经常和stdin一样吗?这实际上是最简单和最好的答案。这里是红宝石白色的腰带目前,我正在艰难地凿穿红宝石的花岗岩墙壁,这一章让我感到困惑,直到我找到了你的解释。谢谢你的解释!简单明了的例子。谢谢!