2
Ruby的GetoptLong文檔給我的印象是它會從ARGV中刪除解析的選項。這裏是有問題的一段話:Ruby GetoptLong修改ARGV?
例如,如果-a不需要論證和可選-b需要一個參數, 解析「-a一個-b二三」會導致(「-a」 ,'')和('-b','two')作爲選項/參數對處理,'1','3'留在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
(我沒有檢查我的紅寶石1.9.2。)
我可以手動刪除選項,但這會有點讓人頭痛,因爲根據你通過它們的方式,每個陣列可能佔用陣列中的一個或兩個插槽(--base=foo
與--base foo
)。如果GetoptLong能夠爲我移除它會更方便。有沒有辦法做到這一點?
是的,這工作!我同意,這是相當噁心。唉:我想一個不好的解決方案比沒有更好,非常感謝它找到它!! 只是fyi,我認爲它可能會修改ARGV,因爲這是Perl Getopt :: Long類的功能是什麼,只是一種瘋狂的猜測 – Joyce 2011-05-26 02:15:44
也許這是由於底層的C庫實現引起的,但它本質上非常不明顯。 – DGM 2011-05-26 12:16:07