使用 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,因为每个分支都 putsARGV[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