使用 ARGV 解析参数的正确方法
Correct way to parse arguments using ARGV
我编写了一个使用 ARGV
作为参数的程序,因为我无法安装外部 gem。
到目前为止我正在做的是:
if ARGV[0] == '-h'
puts "Help page"
elsif ARGV[0] == '--example'
puts "Examples page"
elsif ARGV[0] == '-t'
puts "Gathering intel"
elsif ARGV[0] == '--version'
puts "Version mode"
elsif ARGV[0] == '--dev-mode'
puts "developer mode"
else
puts "Help page"
end
这对我来说似乎不是惯用语。所以我的问题是,是否有正确的方法来解析 Ruby 脚本中的 ARGV
参数?我做了一些研究,看到人们使用 ARGV.shift
等等,这是 Ruby 世界中的 "preferred" 吗?
OptionParser
可能是可能复杂的参数列表的正确选择。
关于你的代码,我会这样重写:
puts case ARGV[0]
when '-h' then "Help page"
when '--example' then "Examples page"
...
end
这里考虑了一个 DRY 原则:一个 puts
,因为每个分支都 puts
,ARGV[0]
只提到一次等等
Array#shift
在遍历参数数组时有意义,除非它为空,因为它从数组中删除了元素。在可能看起来像的伪代码中:
while opt = ARGV.shift do
puts case opt
when '-h' then 'Help requested'
when '-f'
file = ARGV.shift # requires subsequent arg
# possible check for value is valid
do_smth_with_file file
...
end
end
我编写了一个使用 ARGV
作为参数的程序,因为我无法安装外部 gem。
到目前为止我正在做的是:
if ARGV[0] == '-h'
puts "Help page"
elsif ARGV[0] == '--example'
puts "Examples page"
elsif ARGV[0] == '-t'
puts "Gathering intel"
elsif ARGV[0] == '--version'
puts "Version mode"
elsif ARGV[0] == '--dev-mode'
puts "developer mode"
else
puts "Help page"
end
这对我来说似乎不是惯用语。所以我的问题是,是否有正确的方法来解析 Ruby 脚本中的 ARGV
参数?我做了一些研究,看到人们使用 ARGV.shift
等等,这是 Ruby 世界中的 "preferred" 吗?
OptionParser
可能是可能复杂的参数列表的正确选择。
关于你的代码,我会这样重写:
puts case ARGV[0]
when '-h' then "Help page"
when '--example' then "Examples page"
...
end
这里考虑了一个 DRY 原则:一个 puts
,因为每个分支都 puts
,ARGV[0]
只提到一次等等
Array#shift
在遍历参数数组时有意义,除非它为空,因为它从数组中删除了元素。在可能看起来像的伪代码中:
while opt = ARGV.shift do
puts case opt
when '-h' then 'Help requested'
when '-f'
file = ARGV.shift # requires subsequent arg
# possible check for value is valid
do_smth_with_file file
...
end
end