$Copyleft: (c) 2001 Nobuyoshi Nakada <nobu.nokada@softhome.net> $
$Id: optparse.ja.rd,v 0.3 2001/04/13 06:43:30 nobu Exp $

=begin
= 要約
コマンドラインオプション解析用ライブラリ。

サポートしている機能:
(1) 短い形式と長い形式のオプションスイッチを混在可能。
    短形式のスイッチは一つにまとめることも可能。
(2) スイッチの指定とハンドラをそれぞれ一箇所にまとめて書ける。
(3) スイッチの引数は自動的に指定したクラスに変換される。
(4) オプションサマリを作れる。
(5) 後から、あるいは途中でオプションを追加できる。
=end #'#"#`#

=begin
= 概要

== クラス構成
   * ((<OptionParser>)) フロントエンド
   * ((<OptionParser::Switch>)) それぞれのスイッチ
   * ((<OptionParser::List>)) オプションリスト
   * ((<OptionParser::ParseError>)) オプション解析時のエラー
     * ((<OptionParser::AmbiguousOption>))
     * ((<OptionParser::NeedlessArgument>))
     * ((<OptionParser::MissingArgument>))
     * ((<OptionParser::InvalidOption>))
     * ((<OptionParser::InvalidArgument>))
       * ((<OptionParser::AmbiguousArgument>))

== オブジェクト関連図
   +--------------+
   | OptionParser |<>-----+
   +--------------+       |          	       +--------+
                          |          	     ,-| Switch |
        on_head -------->+-------------+    /  +--------+
        accept/reject -->| List        |<|>-
                         |             |<|>-  +----------+
        on ------------->+-------------+    `-| argument |
                         :             :      |  class   |
                         +-------------+      |==========|
        on_tail -------->|             |      |pattern   |
                         +-------------+      |----------|
   OptionParser.accept ->| DefaultList |      |converter |
                reject   |(全インスタン|      +----------+
                         | スで共有)   |
                         +-------------+

=end #'#"#`#

=begin
= クラス & モジュール
=end #'#"#`#
=begin private
== ((:OptionParser::Completion:))
キーワードの補完をするモジュール
=end #'#"#`#
=begin private
--- OptionParser::Completion#complete(key[, pat])
    ((|key|))を探す。見付からない場合は((|pat|))で補完して探す。
    :Parameters:
      : ((|key|))
        検索するキーワード
      : ((|pat|))
        補完するパターン
=end #'#"#`#
=begin private
--- OptionParser::Completion#convert(opt, *val)
    ((<OptionParser::Completion#complete>))で検索した結果から最初のものを取り出す。
=end #'#"#`#
=begin private
== ((:OptionParser::Filling:))
(({Array#fill}))のようなメソッド(({fill}))を追加する。
=end #'#"#`#
=begin private
== ((:OptionParser::OptionMap:))
オプション／キーワード文字列からオブジェクトへのマップ(補完機能付き)。
=== スーパークラス
(({Hash}))
=== インクルードモジュール
((<OptionParser::Completion>)), ((<OptionParser::Filling>))
=end #'#"#`#
=begin
== ((:OptionParser::Switch:))
各スイッチのクラス。
=end #'#"#`#
=begin private
=== クラスメソッド
=end
=begin private
--- OptionParser::Switch.guess(arg)
    ((|arg|))から引数のスタイルを判断する。
    該当する((<OptionParser::Switch>))のサブクラスを返す。
=end #'#"#`#
=begin private
--- OptionParser::Switch.new
=end #'#"#`#
=begin
=== インスタンスメソッド
=end
=begin private
--- OptionParser::Switch#parse_arg(arg) {non-serious error handler}
    スイッチに対する引数をパースして、引数とみなす部分と残りの部分に分割
    して返す。
    :Parameters:
      : ((|arg|))
        パースするスイッチに対する引数。
      : (({block}))
        パターンに引数がマッチしないときに呼ばれる。
=end #'#"#`#
=begin
--- OptionParser::Switch#parse(arg, val) {semi-error handler}
    引数をパース、変換して((|arg|))、((|block|))、変換結果を返す。
    : ((|@conv|))への引数:
      ((|@pattern|))にマッチした部分文字列のリスト、
      ((|$&|)), ((|$1|)), ((|$2|)) など。
    :Parameters:
      : ((|arg|))
        スイッチに直に指定されていた引数の文字列。
      : ((|val|))
        スイッチ以降の引数。
      : (({block}))
        エラーかも知れないときに例外を(({yield}))する。
=end #'#"#`#
=begin
--- OptionParser::Switch#summarize(sdone, ldone, width, max, indent)
    オプションサマリを作る。
    :Parameters:
      : ((|sdone|))
        すでにサマリに入っている短形式オプションをキーとするハッシュ。
      : ((|ldone|))
        すでにサマリに入っている長形式オプションをキーとするハッシュ。
      : ((|width|))
        左側のオプションリスト部分の幅。オプションの説明はその右側、((|width|))桁目から始まる。
      : ((|max|))
        左側の最大幅。オプションは((|max|))桁以内に詰められる。
      : ((|indent|))
        各行をインデントするための文字列。
      : (({block}))
        各行ごとに渡される(改行は付かない)。
=end #'#"#`#
=begin
--- OptionParser::Switch#-@
    反転したブーリアンスイッチ(((|@block|))に渡される引数が反転さ
    れる)を作る
=end #'#"#`#
=begin private
== スイッチの種類
=end #'#"#`#
=begin private
=== ((:OptionParser::Switch::NoArgument:))
引数をとらないスイッチ。
==== スーパークラス
((<OptionParser::Switch>))
==== インスタンスメソッド
--- OptionParser::Switch::NoArgument#parse
    引数があると例外を発生。
=end #'#"#`#
=begin private
=== ((:OptionParser::Switch::RequiredArgument:))
引数をとるスイッチ。
==== スーパークラス
((<OptionParser::Switch>))
==== インスタンスメソッド
--- OptionParser::Switch::RequiredArgument#parse
    引数がないと例外を発生。
=end #'#"#`#
=begin private
=== ((:OptionParser::Switch::OptionalArgument:))
引数を省略できるスイッチ。
==== スーパークラス
((<OptionParser::Switch>))
==== インスタンスメソッド
--- OptionParser::Switch::OptionalArgument#parse
    引数があればそれを解析、なければデフォルト値を使用。
=end #'#"#`#
=begin
== ((:OptionParser::List:))
単一のオプションリスト、短／長形式のオプション文字列からスイッチへのマッ
ピング、受け付けられる引数タイプからパターンとコンバータへのマッピングを
提供する。サマリもここで提供される。
=end #'#"#`#
=begin
=== クラスメソッド
=end #'#"#`#
=begin private
--- OptionParser::List.new
    インスタンスの初期化。
=end #'#"#`#
=begin
=== インスタンスメソッド
=end #'#"#`#
=begin
--- OptionParser::List#atype
    引数タイプからパターン／コンバータのペアへのマップ。
--- OptionParser::List#short
    短形式のオプションスイッチからスイッチオブジェクトへのマップ。
--- OptionParser::List#long
    長形式のオプションスイッチからスイッチオブジェクトへのマップ。
--- OptionParser::List#list
    全スイッチとサマリ文字列のリスト。
=end #'#"#`#
=begin private
--- OptionParser::List#accept(type[, pattern]) {...}
    ((<OptionParser.accept>))参照。
--- OptionParser::List#reject(type)
    ((<OptionParser.reject>))参照。
=end #'#"#`#
=begin private
--- OptionParser::List#update(sw, sopts, lopts, nlopts = [])
    ((|sw|))を((|sopts|))、((|lopts|))、((|nlopts|))にしたがって追加する。
    :Parameters:
      : ((|sw|))
        追加する((<OptionParser::Switch>))インスタンス。
      : ((|sopts|))
        ((|sw|))に対応する短形式オプションのリスト。
      : ((|lopts|))
        ((|sw|))に対応する長形式オプションのリスト。
      : ((|nlopts|))
        否定形式の長形式オプションのリスト。
=end #'#"#`#
=begin
--- OptionParser::List#prepend(switch, short_opts, long_opts, nolong_opts)
    ((|switch|))をリストの頭に挿入して、短／長／否定形式のオプションに対応させる。
--- OptionParser::List#append(switch, short_opts, long_opts, nolong_opts)
    ((|switch|))をリストの最後に追加して、短／長／否定形式のオプションに対応させる。
    :Parameters:
      : ((|switch|))
        挿入する((<OptionParser::Switch>))インスタンス。
      : ((|short_opts|))
        ((|switch|))に対応する短形式オプションのリスト。
      : ((|long_opts|))
        ((|switch|))に対応する長形式オプションのリスト。
      : ((|nolong_opts|))
        (({"no-"}))のつく否定形式のオプションのリスト。
=end #'#"#`#
=begin
--- OptionParser::List#search(id, key) [{block}]
    ((|key|))を((|id|))のリストから検索する。
    :Parameters:
      : ((|id|))
        検索するリスト。
      : ((|k|))
        検索するキー。
      : (({Block}))
        見付かったときにその値で呼び出される。
=end #'#"#`#
=begin
--- OptionParser::List#complete(id, opt, *pat, &block)
    ((|opt|))を((|id|))のリストから((|*pat|))で補完して検索する。
    :Parameters:
      : ((|id|))
        検索するリスト。
      : ((|opt|))
        検索するキー。
      : ((|*pat|))
        補完に使うパターン。
      : (({Block}))
        見付かったときにその値で呼び出される。
=end #'#"#`#
=begin
--- OptionParser::List#summarize(*args) {...}
    サマリテーブルを作る。一行ごとに(({block}))を呼び出す。
    (({@list}))の要素は(({summarize}))できる必要がある。
    :Parameters:
      : ((|args|))
        そのまま各要素の summarize に渡される。
      : (({block}))
        各行ごとに渡される(改行は付かない)。
=end #'#"#`#
=begin private
== ((:OptionParser::CompletingHash:))
補完検索機能付きの(({Hash}))。
=== スーパークラス
(({Hash}))
=== インクルードモジュール
((<OptionParser::Completion>))
=end #'#"#`#
=begin private
=== インスタンスメソッド
--- OptionParser::CompletingHash#match(key)
    ハッシュキーを補完して検索する。
=end #'#"#`#
=begin
== ((:OptionParser:))
オプションパーサのフロントエンド。
=end #'#"#`#
=begin
=== 定数
=end #'#"#`#
=begin
--- OptionParser::ArgumentStyle
    取りうる引数のスタイルの種類。値はそれぞれ:
    : (({OptionParser::NO_ARGUMENT}))
      引数を取らないスイッチ。
    : (({OptionParser::REQUIRED_ARGUMENT}))
      引数が必須のスイッチ。直後に引数が(({=}))で指定されていなければ、次の文字列を引数とみなす。
      空の引数を指定するときは、(({=}))だけをつける。
    : (({OptionParser::OPTIONAL_ARGUMENT}))
      オプショナルな引数を取るスイッチ。つまり引数を付けても付けなくてもよい。

    引数を指定するときは(({--switch=argument}))(長形式)か、
    (({-Xargument}))(短形式)とする。短形式では、((<引数パターン>))にマッ
    チする部分だけが引数として認識される。
=end #'#"#`#
=begin
--- OptionParser::DefaultList
    '--'のように全OptionParserインスタンスで共有するスイッチや、デフォル
    トの引数クラスを持つ。
=end #'#"#`#
=begin undocumented
=== デフォルトオプション
フォルトで認識されるが、オプションサマリには現れないオプション。
--- --help
    オプションサマリを表示する。
--- --version
    (({::Version})) が定義されていればバージョン情報を表示する。
=end #'#"#`#
=begin
=== クラスメソッド
=end #'#"#`#
=begin
--- OptionParser.with([banner[, width[, indent]]]) [{...}]
    新しいインスタンスを作成して、イテレータとして呼ばれているときに
    はブロックをそのインスタンスのコンテクストで評価してから、返す。
    この動作は以前の(({new}))と同じだが、((*depricated*))なメソッド。

    cf. ((<OptionParser#initialize>))
    :Parameters:
      : ((|banner|))
        バナーメッセージ。
      : ((|width|))
        サマリの幅。
      : ((|indent|))
        サマリのインデント文字列。
      : (({Block}))
        作成したインスタンスのコンテクストで評価される。
=end #'#"#`#
=begin
--- OptionParser.new([banner[, width[, indent]]]) [{...}]
    インスタンスを初期化する。イテレータとして呼ばれている場合は、自分自
    身を渡す。
    :Parameters:
      : ((|banner|))
        バナーメッセージ。デフォルトは(({nil}))。
      : ((|width|))
        サマリの幅。デフォルトは32
      : ((|indent|))
        サマリのインデント。デフォルトは空白4個。
      : (({Block}))
        ((|self|))が渡される。
=end #'#"#`#
=begin
--- OptionParser.terminate([arg])
    オプションの解析を終了させる。省略可能な((|arg|))が与えられていると、
    コマンドライン引数に戻される。
    :Parameters:
      : ((|arg|))
        最初のオプションでない引数として戻される文字列。
=end #'#"#`#
=begin
--- OptionParser.accept(t, [pat]) {...}
--- OptionParser#accept(t, [pat]) {...}
    指定したクラスのオプション引数を受け付けられるようにする。
    :Parameters:
      : ((|t|))
        引数クラスを指定するオブジェクト、通常は(({Class}))。
      : ((|pat|))
        引数のパターン。((|t|))が(({match}))を持っていればそれがデフォルト。
      : (({Block}))
        引数の文字列を受け取って要求されるクラスに変換する。
=end #'#"#`#
=begin
--- OptionParser.reject(t)
--- OptionParser#reject(t)
    指定したクラスのオプション引数を受け付けないようにする。
    :Parameters:
      : ((|t|))
        引数クラスを指定するオブジェクト。
=end #'#"#`#
=begin private
--- OptionParser.yieldproc(*args) {block}
    (({Proc}))や(({Method}))をイテレータブロックとして((|args|))を引数にして呼び出す。
    :Parameters:
      : ((|*args|))
        (({Block}))への引数。
      : (({Block}))
        呼び出す(({Proc}))か(({Method}))。ブロックとして渡されなければならない。
=end #'#"#`#
=begin
=== インスタンスメソッド
=end #'#"#`#
=begin
--- OptionParser#banner
--- OptionParser#banner=(heading)
    サマリの先頭に出力されるバナー。
--- OptionParser#summary_width
--- OptionParser#summary_width=(width)
    サマリのオプションリスト部分の幅。(({Numeric}))である要がある。
--- OptionParser#summary_indent
--- OptionParser#summary_indent=(indent)
    サマリのインデント。(({String}))でなければならない(もしくは
    (({String}))を(({+}))できるモノ)。
--- OptionParser#program_name
--- OptionParser#program_name=(name)
    エラーメッセージやデフォルトのバナーで出力されるプログラム名。
    デフォルトは(({$0}))。
=end #'#"#`#
=begin
--- OptionParser#top
    ((<on>))/((<on_head>))、((<accept>))/((<reject>))の対象。
=end #'#"#`#
=begin
--- OptionParser#base
    ((<on_tail>))の対象。
=end #'#"#`#
=begin
--- OptionParser#new
    新しい(({List}))を追加する。
=end #'#"#`#
=begin
--- OptionParser#remove
    最後の(({List}))を削除する。
=end #'#"#`#
=begin
--- OptionParser#summarize(to = [], width = @summary_width, max = width - 1, indent = @summary_indent)
    オプションサマリを((|to|))に作る。((|to|))を返す。
    :Parameters:
      : ((|to|))
        出力先。((|<<|))メソッドが必要。デフォルトは(({[]}))。
      : ((|width|))
        左側、オプションリスト部の幅。デフォルトは((|@summary_width|))。
      : ((|max|))
        左側で使える最大幅。デフォルトは(({((|width|)) - 1}))。
      : ((|indent|))
        インデント。デフォルトは((|@summary_indent|))。
      : (({Block}))
        イテレータとして呼ばれていると、各行ごとに呼び出される。
=end #'#"#`#
=begin
--- OptionParser#to_str
--- OptionParser#to_s
    オプションサマリ文字列を返す。
=end #'#"#`#
=begin
--- OptionParser#to_a
    オプションサマリを配列として返す。
=end #'#"#`#
=begin
--- OptionParser#switch
    ((<OptionParser::Switch>))を作る。
    :Parameters:
      : ((|opts|))
        オプション定義。
        : 引数スタイル
          ((<OptionParser::ArgumentStyle>))参照。
        : 引数パターン
          受け付けられるオプション引数の形式。((<OptionParser.accept>))や
          ((<OptionParser#accept>))であらかじめ定義されているか、
          (({Regexp}))などの(({match}))メソッドを持つオブジェクトでなけれ
          ばならない。これは一度だけ指定できる(もしなければ(({Object}))と
          みなされる)が、さもなければ(({ArgumentError}))を起こす。
          
          cf. ((<引数として受け付けられるクラス>)).
        : Hash
        : Array
          取り得る引数の値。
        : Proc
        : Method
          ((*handler*))を与える別の手段。
        : "--switch=MANDATORY", "--switch[=OPTIONAL]", "--switch"
          それぞれ引数が必須、省略可能、無しの長形式スイッチ。
        : "-xMANDATORY", "-x[OPTIONAL]", "-x"
          それぞれ引数が必須、省略可能、無しの短形式スイッチ。
        : "-[a-z]MANDATORY", "-[a-z][OPTIONAL]", "-[a-z]"
          キャラクタクラスにマッチする短形式のスイッチ
          (正規表現全てが使えるわけではない)。
        : "=MANDATORY", "=[OPTIONAL]"
          引数スタイル。
        : "description", ...
          このスイッチの説明。
      : (({Block}))
        このスイッチが指定されたときに呼び出される((*handler*))。
=end #'#"#`#
=begin
--- OptionParser#on(*opts) [{...}]
--- OptionParser#def_option(*opts) [{...}]
--- OptionParser#on_head(*opts) [{...}]
--- OptionParser#def_head_option(*opts) [{...}]
--- OptionParser#on_tail(*opts) [{...}]
--- OptionParser#def_tail_option(*opts) [{...}]
    オプションスイッチとハンドラを定義する。(({on_head}))、(({def_head_option}))と
    (({on_tail}))、(({def_tail_option}))はそれぞれスイッチをサマリの最
    初と最後におく。

    cf. ((<OptionParser#switch>)).
=end #'#"#`#
=begin
--- OptionParser#order(*argv) [{...}]
--- OptionParser#order!([argv = ARGV]) [{...}]
    ((|argv|))を出て来る順番にしたがって解析する。オプションでない引数が
    あると、イテレータとして呼ばれていればそれを渡して呼び出す。さもなけ
    れば解析を終了する。
    解析されずに残った((|argv|))を返す。
    
    (({order!}))は配列自身を受け取って、スイッチを破壊的に取り除く。
    デフォルトでは((|ARGV|))を解析する。
    :Parameters:
      : ((|argv|))
        解析するコマンドライン引数の配列。
      : (({Block}))
        オプションでない引数があると呼び出される。
=end #'#"#`#
=begin
--- OptionParser#permute(*argv)
--- OptionParser#permute!([argv = ARGV])
    ((|argv|))を並び変えモードで解析して、オプションでない引数のリストを
    返す。
    
    (({permute!}))は配列自身を受け取って、スイッチを破壊的に取り除く。
    デフォルトでは((|ARGV|))を解析する。
    :Parameters:
      : ((|argv|))
        解析するコマンドライン引数の配列。
=end #'#"#`#
=begin
--- OptionParser#parse(*argv)
--- OptionParser#parse!([argv = ARGV])
    環境変数(({POSIXLY_CORRECT}))がセットされているときは順序通りに、そ
    れ以外は並べ変えモードで、((|argv|))を解析する。

    (({parse!}))は配列自身を受け取って、スイッチを破壊的に取り除く。
    デフォルトでは((|ARGV|))を解析する。
    :Parameters:
      : ((|argv|))
        解析するコマンドライン引数の配列。
=end #'#"#`#
=begin private
--- OptionParser#visit(id, *args) {block}
    (({スタック}))に対してメソッド((|id|))を((|*args|))と共に呼び出す。
    :Parameters:
      : ((|id|))
        (({スタック}))の各要素に対して呼び出すメソッド。
      : ((|*args|))
        ((|id|))に渡される。
      : (({Block}))
        ((|id|))に渡される。
=end #'#"#`#
=begin private
--- OptionParser#search(id, k)
    ((|k|))を((|id|))のハッシュのスタックから探して見付かった値を返す。
    イテレータとして呼ばれているとその値でyieldする。
    :Parameters:
      : ((|id|))
        検索するテーブル。
      : ((|k|))
        検索するキー。
      : (({Block}))
        キーが見付かったときに値でyieldされる。
=end #'#"#`#
=begin private
--- OptionParser#complete(opt)
    省略されている長形式オプションスイッチを補完して、正規化されたスイッ
    チ名とスイッチオブジェクト((<OptionParser::Switch>))のペアを返す。
    :Parameters:
      : ((|opt|))
        長形式オプションスイッチ((({'--'}))はなし)。
=end #'#"#`#
=begin
= 引数として受け付けられるクラス
=end #'#"#`#
=begin
: Object
  任意の文字列、変換されない。何も指定しないとこれになる。
=end #'#"#`#
=begin
: String
  任意の空でない文字列、変換されない。
=end #'#"#`#
=begin
: Integer
  Ruby/C的な整数、(({0}))で始まれば8進数、(({0b}))で始まれば2進数、
  (({0x}))で始まれば16進数、それ以外は10進数とみなす。符号も付けられる。
  (({Integer}))に変換される。
=end #'#"#`#
=begin
: Float
  実数形式、(({Float}))に変換される。
=end #'#"#`#
=begin
: Numeric
  汎用の数値、整数形式なら(({Integer}))、実数形式なら
  (({Float}))に変換される。
=end #'#"#`#
=begin
: OptionParser::DecimalInteger
  10進整数、(({Integer}))に変換される。
=end #'#"#`#
=begin
: OptionParser::OctalInteger
  Ruby/C的な 8/16/2進整数、(({Integer}))に変換される。
=end #'#"#`#
=begin
: OptionParser::DecimalNumeric
  10進整数／実数形式。整数形式なら(({Integer}))、実数形式なら
  (({Float}))に変換される。
=end #'#"#`#
=begin
: TrueClass
  ブーリアンスイッチ、存在すれば真、または(({no-}))が前に付いていれば偽。
  もしくは(({yes/no/true/false}))で示される値。
: FalseClass
  ((<TrueClass>))と似ているが、デフォルトの値は(({false}))。
=end #'#"#`#
=begin
: Array
  ","区切り文字列。
=end #'#"#`#
=begin
= 例外
=end #'#"#`#
=begin
== ((:OptionParser::ParseError:))
((<OptionParser>))で発生する例外のベースクラス。
=== スーパークラス
(({RuntimeError}))
=== 定数
: OptionParser::ParseError::Reason
  エラー原因。
=== インスタンスメソッド
--- OptionParser::ParseError#reason
    エラーの理由を返す。
--- OptionParser::ParseError#inspect
    可読形式の文字列を返す。
--- OptionParser::ParseError#message
--- OptionParser::ParseError#to_s
--- OptionParser::ParseError#to_str
    デフォルトの文字列化メソッド、標準的なエラーメッセージ用。
=end #'#"#`#
=begin
== ((:OptionParser::AmbiguousOption:))
補完が一意に決められないときに発生する。
=== スーパークラス
((<OptionParser::ParseError>))
=end #'#"#`#
=begin
== ((:OptionParser::NeedlessArgument:))
引数を取らないスイッチに引数が指定されていたときに発生する。
=== スーパークラス
((<OptionParser::ParseError>))
=end #'#"#`#
=begin
== ((:OptionParser::MissingArgument:))
引数が必要なスイッチに引数が無かったときに発生する。
=== スーパークラス
((<OptionParser::ParseError>))
=end #'#"#`#
=begin
== ((:OptionParser::InvalidOption:))
定義されていないスイッチで発生する。
=== スーパークラス
((<OptionParser::ParseError>))
=end #'#"#`#
=begin
== ((:OptionParser::InvalidArgument:))
与えられた引数がフォーマットに合わなかったときに発生する。
=== スーパークラス
((<OptionParser::ParseError>))
=end #'#"#`#
=begin
== ((:OptionParser::AmbiguousArgument:))
与えられた引数が一意に決定できなかったときに発生する。
=== スーパークラス
((<OptionParser::InvalidArgument>))
=end #'#"#`#
=begin
= その他
=end #'#"#`#
=begin
== ((:OptionParser::Arguable:))
コマンドライン引数の配列に、自分自身をパースする機能を拡張する。
(({optparse.rb}))を(({require}))すると、((|ARGV|))が拡張されている。
=end #'#"#`#
=begin
--- OptionParser::Arguable#options=
    ((<OptionParser>))オブジェクトをセットする。
    ((|opt|))が(({false}))か(({nil}))なら、
    ((<OptionParser::Arguable#options>))メソッドと
    ((<OptionParser::Arguable#options=>))メソッドが未定義にされる。
    つまり、このレシーバ経由で((<OptionParser>))オブジェクトにアクセス
    する方法は無くなる。
=end #'#"#`#
=begin
--- OptionParser::Arguable#options [{...}]
    実際の((<OptionParser>))オブジェクト。
    設定されていなければ自動的に作られる。

    イテレータとして呼ばれると、((<OptionParser>))オブジェクトと共に呼び出して、
    その結果を戻り値とする。このとき、((<OptionParser::ParseError>))例外は補足され、
    エラーメッセージを((<STDERR>))に表示するだけで(({nil}))を返す。

    :Parameters:
      : (({block}))
        設定されている((<OptionParser>))のインスタンスとともに呼ばれる。
=end #'#"#`#
=begin
--- OptionParser::Arguable#order!
--- OptionParser::Arguable#permute!
--- OptionParser::Arguable#parse!
    ((|self|))を破壊的にパースして、((|self|))を返す。パースされなかった
    文字列だけを残す。
=end #'#"#`#
=begin
== ((:OptionParser::Acceptables:))
((<OptionParser>))で定義されている、引数として受け付けられるパターンの定数を含んでいる。
今のところ(({DecimalInteger}))、(({OctalInteger}))、(({DecimalNumeric}))。
((<引数として受け付けられるクラス>))参照。
=end #'#"#`#
=begin example
= Example
<<< opttest.rb
=end #'#"#`#
