ARGV在Ruby中有什么意义?

Jas*_*son 3 ruby stdin argv

ARGV在Ruby中有什么意义?

first, second, third = ARGV 
puts "The script is called: #{$0}"
puts "Your first variable is: #{first}"
puts "Your second variable is: #{second}"
puts "Your third variable is: #{third}"
Run Code Online (Sandbox Code Playgroud)

在运行我需要做的文件时,重点是什么:

ruby ex1.rb
Run Code Online (Sandbox Code Playgroud)

并输入我需要输入的第一,第二和第三个变量

ruby ex1.rb blah blah blah
Run Code Online (Sandbox Code Playgroud)

这对所有运行程序的人有什么好处?他们无论如何都做不到,因为我认为它是一个可执行文件:

user = ARGV.first
prompt = '> '

puts "Hi #{user}, I'm the #{$0} script."
puts "I'd like to ask you a few questions."
puts "Do you like me #{user}?"
print prompt
likes = STDIN.gets.chomp()

puts "Where do you live #{user}?"
print prompt
lives = STDIN.gets.chomp()

puts "What kind of computer do you have?"
print prompt
computer = STDIN.gets.chomp()

puts <<MESSAGE
Alright, so you said #{likes} about liking me.
You live in #{lives}.  Not sure where that is.
And you have a #{computer} computer.  Nice.
MESSAGE
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释一下吗?

And*_*all 87

ARGVRuby 的重点是什么?

ARGV "包含传递给脚本的参数,每个元素一个."

在运行您需要执行的文件时,有什么意义:ruby ex1.rb输入您需要输入的第一,第二和第三个变量ruby ex1.rb blah blah blah.

这是确切的一点,能够在运行文件时指定参数,如:

ruby ex1.rb -a -b 3
Run Code Online (Sandbox Code Playgroud)

这对所有运行程序的人有什么好处?

任何其他命令行程序都可以获得相同的好处:用户可以预先指定他们想要的内容,并且比交互式CLI更容易编写脚本.

他们无论如何都做不到,因为我认为它是一个可执行文件.

是的他们可以.您刚刚举例说明了用户如何以这种方式运行程序.它是否可执行不会改变任何东西.

  • 嗯,这回答了你的问题吗?不要忘记[upvote/accept你的问题](http://meta.stackexchange.com/a/5235/158402)`:) (15认同)

tad*_*man 24

ARGV 有很长的传统,来自UNIX/POSIX世界,其中大多数C程序必须包含以下内容:

int main(int argc, char **argv)
{
   return(0);
}
Run Code Online (Sandbox Code Playgroud)

argc表示提供的参数数量,并且argv是指向第一个可能的多个字符串指针的低级指针.这个名字argv以各种形式存在.

命令行参数非常受开发人员的欢迎,尽管它们通常不会像你想象的那样被使用.未命名的参数更难处理.这就是optparse存在帮助处理它们的原因.

以下是OptionParser文档中的示例:

require 'optparse'

options = {}
OptionParser.new do |opts|
  opts.banner = "Usage: example.rb [options]"

  opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
    options[:verbose] = v
  end
end.parse!

p options
p ARGV
Run Code Online (Sandbox Code Playgroud)

这允许您定义更多可用的命令行参数,然后使用它们.对于你的例子,我希望它像这样工作:

test_script --live "New York" --computer "Lenovo" --like
Run Code Online (Sandbox Code Playgroud)

这使得参数非常明显,因为它们被命名了.


Gre*_*own 13

考虑到一些Ruby的命令行实用工具,比如rails,rake,gem,或bundle.虽然这些都不是最终用户应用程序(如Web应用程序或GUI应用程序),但它们仍然是用Ruby编写的程序,用户可以与之交互.他们都接受了争论:

$ rails new my_app
$ rake tests
$ gem install rails --no-rdoc --no-ri
$ bundle update
Run Code Online (Sandbox Code Playgroud)

可以使用它ARGV来实现接受参数的这些命令行程序.虽然我们经常使用OptionParser标准库或其他工具来实现此目的,但ARGV是这些工具构建在其上的低级别集合.

所以,如果你曾经运行gem,rails,rake,或者bundle,或者是用Ruby编写的任何命令行的开发工具,你会受益匪浅ARGV!


Gar*_*ary 5

关键ARGV在于它使脚本能够在没有人为输入的情况下运行,并且还允许输入可能在一次迭代到下一次迭代之间变化的情况.

例如,您可能正在运行三个不同的脚本来获取三个值.然后可以将这些值传递到此脚本中,ARGV并可用于获取这些选项的值.