使用ARGV解析参数的正确方法

13a*_*aal 0 ruby argv

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世界中的"首选"吗?

Ale*_*kin 5

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)

  • `optparser`不是宝石,它在标准的ruby库中.你只需要它. (3认同)