在以下脚本中:
first, second, third = ARGV
puts "The oldest brothers name is #{first}"
puts "The middle brothers name is #{second}"
puts "The youngest brothers name is #{third}"
puts "What is your moms name?"
mom = $stdin.gets.chomp
puts "What is your dads name?"
dad = $stdin.gets.chomp
puts "In the my family there are three sons #{first}, #{second}, #{third}, and a mom named #{mom}, and a father named #{dad}"
如果没有gets
,我无法使用$stdin
命令接受用户输入。我必须使用$stdin.gets
才能使其正常工作。
为什么? ARGV
做了什么禁用此功能? $stdin
命令默认不包括gets
吗?
答案 0 :(得分:1)
来自gets功能文档:
返回(并指定$ _)ARGV(或$ *)中文件列表中的下一行,如果命令行中没有文件,则返回标准输入。
因此,如果您将命令行参数传递给ruby程序,gets
将不再从$stdin
读取,而是从您传递的文件中读取。
想象一下,我们在名为argv.rb
的文件中有一个较短的代码示例:
first, second = ARGV
input = gets.chomp
puts "First: #{first}, Second: #{second}, Input #{input}"
我们创建了以下文件:
$ echo "Alex" > alex
$ echo "Bob" > bob
我们运行我们的程序,如ruby argv.rb alex bob
,输出将是:
First: alex, Second: bob, Input Alex
请注意,input
的值为" Alex",因为这是第一个文件' alex'的内容。如果我们第二次打电话给gets
,那么返回的值将是" Bob"因为这是下一个文件中的内容," bob"。