ARGV由于我无法安装外部宝石,我编写了一个用作参数的程序.
我到目前为止所做的是:
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
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎不是惯用语.所以我的问题是,是否有正确的方法来解析ARGVRuby脚本中的参数?我做过一些研究,看过人们使用ARGV.shift等等,这是Ruby世界中的"首选"吗?
OptionParser 可能是可能复杂的参数列表的正确选择.
关于你的代码,我会以这种方式重写它:
puts case ARGV[0]
when '-h' then "Help page"
when '--example' then "Examples page"
...
end
Run Code Online (Sandbox Code Playgroud)
这是一个考虑到DRY原则:一puts,因为每个分支都做puts,ARGV[0]只提到一次等.
Array#shift在循环遍历arguments数组时有意义,除非它是空的,因为它从数组中删除了元素.在伪代码中可能看起来像:
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
Run Code Online (Sandbox Code Playgroud)