命令行参数和“gets”

  • 本文关键字:gets 参数 命令行 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}"

如果没有$stdin,我无法使用 gets 命令接受用户输入。我必须使用$stdin.gets才能使其正常工作。

为什么?ARGV做了什么来禁用此功能?默认情况下$stdin不包含在 gets 命令中吗?

从 get 函数文档中:

返回(并分配给 $_)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"中的内容。

相关内容

  • 没有找到相关文章

最新更新