module Arg:コマンドライン引数の解析sig..end
このモジュールはプログラムのコマンドラインからオプションとその引数を取り出すための一般的な仕組みを提供します。
コマンドラインの構文は次のようになります。
キーワードは - から始まる文字列です。
オプションはキーワード単体、またはそれに引数の続いたものです。
キーワードの種類には Unit、 Bool、 Set、 Clear、
String、 Set_string、 Int、 Set_int、 Flaot、 Set_float、
Tuple、 Symbol、 Rest があります。
Unit、 Set、 Clear キーワードは引数は取りません。
Rest キーワードはコマンドライン引数の残りを引数として取ります。
それ以外のキーワードはコマンドラインで直後に来た文字列を引数として取ります。
キーワードに後続しない引数は無名引数と呼びます。
例(cmd はコマンドの名前とします):
cmd -flag : unit オブションcmd -int 1 : 1 を引数とする int オプションcmd -string foobar : "foobar" を引数とする string オプションcmd -float 12.34 : 12.34 を引数とする float オプションcmd a b c : みっつの無名引数 "a"、 "b"、 "c"cmd a b -- c d : ふたつの無名引数と二引数の rest オプションtype spec =
| |
Unit of |
(* | ユニットを引数として関数を呼び出します | *) |
| |
Bool of |
(* | 真偽値引数を引数として関数を呼び出します | *) |
| |
Set of |
(* | リファレンスの値を真に設定します | *) |
| |
Clear of |
(* | リファレンスの値を偽に設定します | *) |
| |
String of |
(* | 文字列引数を引数として関数を呼び出します | *) |
| |
Set_string of |
(* | リファレンスの値を文字列引数の値に設定します | *) |
| |
Int of |
(* | 整数引数を引数として関数を呼び出します | *) |
| |
Set_int of |
(* | リファレンスの値を整数引数の値に設定します | *) |
| |
Float of |
(* | 浮動小数点数引数を引数として関数を呼び出します | *) |
| |
Set_float of |
(* | リファレンスの値を浮動小数点数引数の値に設定します | *) |
| |
Tuple of |
(* | spec list に従って複数の引数を取ります | *) |
| |
Symbol of |
(* | シンボルのうちいずれかを引数として取り、それを引数として関数を呼び出します | *) |
| |
Rest of |
(* | キーワードの解釈を停止し、残りの引数各々を引数として関数を呼び出します | *) |
typekey =string
typedoc =string
typeusage_msg =string
typeanon_fun =string -> unit
val parse : (key * spec * doc) list -> anon_fun -> usage_msg -> unitArg.parse speclist anon_fun usage_msg はコマンドラインを解析します。
speclist は (key, spec, doc) の三つ組のリストです。
key はオプションのキーワードで '-' から始まらなければなりません。
spec はオプションの種類と、コマンドラインでそのオプションに遭遇したときに呼び出される関数を指定します。
doc はこのオプションを一行で説明する文字列です。
anon_fun は無名引数に対して呼び出されます。
spec と anon_fun で指定された関数は対応する引数がコマンドラインに現れた順に呼び出されます。
エラーが起こった場合には Arg.parse は以下のエラーメッセージを表示してプログラムを終了させます。
usage_msgdoc を続けたもの- で始まる無名引数を指定したい場合には、 speclist に例えば
("-" String anon_fun, doc) のように書きます。
parse はデフォルトで -help と --help というユニットオプションを理解します。
これらのオプションは usage_msg とオプションのリストを表示し、プログラムを終了します。
speclist に -help オプションや --help オプションの指定を追加すればこの動作を上書きすることができます。
val parse_argv : ?current:int ref ->
string array ->
(key * spec * doc) list -> anon_fun -> usage_msg -> unitArg.parse_args ~current args speclist anon_fun usage_msg
は配列 args をコマンドライン引数と見做して解析します。
~current が与えられた場合はそれを、与えられなかった場合は Arg.current を更新しながら解析をします。
parse_args を呼び出す前に Arg.current を設定しておかなければなりません。
current の初期値は配列中でプログラム名(第 0 引数)を表す添字です。
エラーが起こった場合には、エラーメッセージを引数として Arg.Bad 例外が発生します。
-help オプションや --help オプションが渡された場合には、エラーメッセージを引数として Arg.Help 例外が発生します。exception Help of string
-help や --help を与えた場合に Arg.parse_args が発生させます。exception Bad of string
spec 中の関数や anon_fun は不正な引数を受け取ったときにエラーメッセージとともに
Arg.Bad 例外を発生させることができます。
また、 Arg.parse_argv でエラーが起こった場合にも発生します。val usage : (key * spec * doc) list -> usage_msg -> unitArg.usage speclist usage_msg は有効なコマンドライン引数を含むエラーメッセージを表示します。
これは Arg.parse がエラーのときに表示するものと同じメッセージです。
speclist と usage_msg は Arg.parse に渡すものと同じです。val align : (key * spec * doc) list -> (key * spec * doc) listSymbol 引数に対応する doc 文字列は改行したうえで表示するように整形されます。val current : int refSys.argv 中での)位置を表します。
引数を読み飛ばすためにこの値を変更することもできます。
Arg.parse は呼び出し時の Arg.current の値が第 0 引数(プログラム名)の位置を表しているものとし、その次の要素から引数の解析を始めます。