什么是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
有人可以解释这样对我?
什么是点ARGV
在Ruby中?
ARGV
“包含传递给脚本,每个元素一个论点。”
什么是这个点时运行,你需要做的文件: ruby ex1.rb
,并把在您需要键入在第一,第二和第三变量ruby ex1.rb blah blah blah
。
这是确切的点,能够指定运行文件一样时参数:
ruby ex1.rb -a -b 3
如何在所有的人这样做的好处运行的程序?
同样的好处任何其他命令行程序,从能够做的,就可以得到:用户可以指定前期他们想要的东西,而且它更容易脚本比交互式CLI。
他们不能做到这一点无论如何,因为我认为它是一个可执行文件。
是的他们可以。 你只给了恰好用户如何在这种方式运行您的程序的例子。 无论是不是可执行不会改变任何东西。
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
这使得它很明显的论点是什么,因为他们的名字命名。
考虑到一些Ruby的命令行实用工具,比如rails
, rake
, gem
,或bundle
。 虽然这些都不是最终用户的应用程序(如Web应用程序或GUI应用),他们仍然使用Ruby编写的程序有用户互动。 他们都接受参数:
$ rails new my_app
$ rake tests
$ gem install rails --no-rdoc --no-ri
$ bundle update
它可以使用ARGV
来实现这些类型的接受参数的命令行程序。 虽然我们经常会使用OptionParser标准库或其他一些工具,为此,ARGV是低层次的集合这些工具都是建立在顶部。
所以,如果你曾经运行gem
, rails
, rake
,或bundle
,或者是用Ruby编写的任何命令行的开发工具,你会受益匪浅ARGV
!
点ARGV
是,它使脚本能够无需人工输入运行,并且还允许在输入可能会发生变化,从一次迭代到下一个的情况。
例如,你可以运行三种不同的脚本来获得三个值。 然后,这些值可以传递到这个脚本和ARGV
可以用来获得这些选项的值。
我用来运行一个脚本,向我提问一个电子邮件地址和密码。 它被用来登录到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,希望更好地学习如何使用它,但是这是一个功能,我发现非常有用的。