什么是ARGV的Ruby的意义呢?(What's the point of ARGV in

2019-07-03 17:51发布

什么是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}"

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

ruby ex1.rb

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

ruby ex1.rb blah blah blah

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

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

有人可以解释这样对我?

Answer 1:

什么是点ARGV在Ruby中?

ARGV “包含传递给脚本,每个元素一个论点。”

什么是这个点时运行,你需要做的文件: ruby ex1.rb ,并把在您需要键入在第一,第二和第三变量ruby ex1.rb blah blah blah

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

ruby ex1.rb -a -b 3

如何在所有的人这样做的好处运行的程序?

同样的好处任何其他命令行程序,从能够做的,就可以得到:用户可以指定前期他们想要的东西,而且它更容易脚本比交互式CLI。

他们不能做到这一点无论如何,因为我认为它是一个可执行文件。

是的他们可以。 你只给了恰好用户如何在这种方式运行您的程序的例子。 无论是不是可执行不会改变任何东西。



Answer 2:

ARGV有着悠久的传统,来自于UNIX / POSIX的世界里,大多数C程序必须包含以下内容:

int main(int argc, char **argv)
{
   return(0);
}

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

这允许你定义更有用的命令行参数,然后使用它们。 对于你的榜样,我希望它是这样工作的:

test_script --live "New York" --computer "Lenovo" --like

这使得它很明显的论点是什么,因为他们的名字命名。



Answer 3:

考虑到一些Ruby的命令行实用工具,比如railsrakegem ,或bundle 。 虽然这些都不是最终用户的应用程序(如Web应用程序或GUI应用),他们仍然使用Ruby编写的程序有用户互动。 他们都接受参数:

$ rails new my_app
$ rake tests
$ gem install rails --no-rdoc --no-ri
$ bundle update

它可以使用ARGV来实现这些类型的接受参数的命令行程序。 虽然我们经常会使用OptionParser标准库或其他一些工具,为此,ARGV是低层次的集合这些工具都是建立在顶部。

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



Answer 4:

ARGV是,它使脚本能够无需人工输入运行,并且还允许在输入可能会发生变化,从一次迭代到下一个的情况。

例如,你可以运行三种不同的脚本来获得三个值。 然后,这些值可以传递到这个脚本和ARGV可以用来获得这些选项的值。



Answer 5:

我用来运行一个脚本,向我提问一个电子邮件地址和密码。 它被用来登录到100的一个账户中。 最喜欢的Ruby脚本,我会在命令行中运行它。 这不得不外表来作为一个“可执行文件”,特别是没有一个与你点击一个图标。

我想运行的程序,它会问我要电子邮件地址和密码登录,然后在我使用的Watir。

puts "Email of Account"
account_email = gets.chomp

puts "Enter Password"
password = gets.chomp

# code that logs me in

然而,我发现,在服用通过ARGV这些价值观是我的目的快得多。

account_email, password = ARGV
# code that logs me in

然后,我可以只输入

$ ruby my_script.rb my.email@emailplace.com mypassword

并按下回车键。 此外,我可以只按向上箭头在控制台,以不同的名称和密码,一次又一次或更新的版本中运行它来快速测试我的脚本。

把它更进了一步,我做了一个shell脚本,可以运行在多种组合这个脚本,指定参数和所有

ruby my_script.rb oneofmy@emails.com mypassword
ruby my_script.rb another@emails.com otherpassword

最后,有时我需要设置几十个每个我跑了剧本时每设置,然后运行该脚本多次。 所以,我也可以很容易地插入几十个变量进入命令行脚本

ruby my_script.rb option1 option2 option3 option4

我很新的使用ARGV,希望更好地学习如何使用它,但是这是一个功能,我发现非常有用的。



文章来源: What's the point of ARGV in Ruby?
标签: ruby stdin argv