命令行参数和`gets`

时间:2016-04-24 15:20:44

标签: ruby

在以下脚本中:

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吗?

1 个答案:

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