2

RubyのGetoptLongのドキュメントは、解析されたオプションをARGVから削除するという印象を私に与えました。問題の箇所は次のとおりです。

たとえば、-aが引数を必要とせず、-bがオプションで引数を取る場合、'-a one -b two three'を解析すると、('-a'、'')および('-b'、'two ')オプション/引数のペアとして処理され、' one'、'three'が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を使用していることを確認しました。)

オプションを手動で削除することもできますが、オプションを渡す方法に応じて、それぞれが配列内の1つまたは2つのスロットを占有する可能性があるため(--base=foovs. --base foo)、これは少し頭痛の種になります。GetoptLongが私のためにそれらを削除できれば、はるかに便利です。これを行う方法はありますか?

4

1 に答える 1

4

アイテムがgetoptグループに入れられなかったことを意味することを理解したと思います。他のすべてと同様に、ARGVに残されます...なぜARGVを変更するのでしょうか。

ewwを更新します。ドキュメントの例を試してみた後、opts.eachが実行されるまで、ARGVからアイテムが削除されません...削除は、optsでアイテムにアクセスした場合の副作用のようです。

非常に悪い形。:(

于 2011-05-26T01:52:46.210 に答える