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更容易编写脚本.
他们无论如何都做不到,因为我认为它是一个可执行文件.
是的他们可以.您刚刚举例说明了用户如何以这种方式运行程序.它是否可执行不会改变任何东西.
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!
关键ARGV在于它使脚本能够在没有人为输入的情况下运行,并且还允许输入可能在一次迭代到下一次迭代之间变化的情况.
例如,您可能正在运行三个不同的脚本来获取三个值.然后可以将这些值传递到此脚本中,ARGV并可用于获取这些选项的值.
| 归档时间: |
|
| 查看次数: |
42927 次 |
| 最近记录: |