Ruby GetoptLong会修改ARGV吗?

| Ruby \的GetoptLong文档给我的印象是,它将从ARGV中删除已解析的选项。这是相关段落:   例如,如果-a不需要参数,而-b可以选择接受参数,   解析'-a一-b二三'将导致('-a','')和('-b','二')被作为选项/参数对处理,而'一','三'被留在ARGV。 但是,事实并非如此。这是我的程序:
#!/usr/bin/env ruby

require \"getoptlong\"
opts = GetoptLong.new(
  [\"--start\", \"-s\", GetoptLong::REQUIRED_ARGUMENT],
  [\"--base\",  \"-b\", GetoptLong::REQUIRED_ARGUMENT]
)

puts ARGV
这是输出:
$ number-photos --start 2 --base foo *
--start
2
--base
foo
aac-to-mp3
backup-wp-uploads
exiv-webcam-imgs
get-updates
music-to-lily
number-photos
ogg-to-mp3
rename-music
restore-uploads
resymlink
sprints
sync-jt
sync-st
timestamp
unix-names
(我确实检查过我使用的是Ruby 1.9.2。) 我可以手动删除这些选项,但这会有些令人头疼,因为根据您传递它们的方式,每个选项都可能占用阵列中的一个或两个插槽(
--base=foo
--base foo
)。如果GetoptLong可以为我删除它们,将会更加方便。有什么办法吗?     
已邀请:
我想我明白这意味着该项目没有放入getopt组中。它和其他所有项目一样都留在ARGV中……为什么要修改ARGV? 更新eww。在对文档中的示例进行了一些试验之后,它直到运行opts.each才从ARGV中删除项目。似乎删除是访问opts中的项目的副作用。 形式很糟糕。 :(     

要回复问题请先登录注册