模組 Stdlib.Arg

module Arg: Arg

type spec = 
| Unit of (unit -> unit) (*

以 unit 參數呼叫函式

*)
| Bool of (bool -> unit) (*

以布林值參數呼叫函式

*)
| Set of bool ref (*

將參考值設定為 true

*)
| Clear of bool ref (*

將參考值設定為 false

*)
| String of (string -> unit) (*

以字串參數呼叫函式

*)
| Set_string of string ref (*

將參考值設定為字串參數

*)
| Int of (int -> unit) (*

以整數參數呼叫函式

*)
| Set_int of int ref (*

將參考值設定為整數參數

*)
| Float of (float -> unit) (*

以浮點數參數呼叫函式

*)
| Set_float of float ref (*

將參考值設定為浮點數參數

*)
| Tuple of spec list (*

根據 spec 清單取得數個參數

*)
| Symbol of string list * (string -> unit) (*

取得符號清單中的其中一個符號作為參數,並以該符號呼叫函式

*)
| Rest of (string -> unit) (*

停止解譯關鍵字,並以每個剩餘參數呼叫函式

*)
| Rest_all of (string list -> unit) (*

停止解譯關鍵字,並以所有剩餘參數呼叫函式

*)
| Expand of (string -> string array) (*

如果剩餘要處理的參數形式為 ["-foo""arg"] @ rest,其中 "foo" 註冊為 Expand f,則會處理參數 "arg" @ rest。僅允許在 parse_and_expand_argv_dynamic 中使用。

*)

描述與關鍵字關聯行為的具體類型。

type key = string 
type doc = string 
type usage_msg = string 
type anon_fun = string -> unit 
val parse : (key * spec * doc) list -> anon_fun -> usage_msg -> unit

Arg.parse speclist anon_fun usage_msg 會解析命令列。speclist 是一個三元組 (key, spec, doc) 的清單。key 是選項關鍵字,必須以 '-' 字元開頭。spec 提供選項類型以及在命令列上找到此選項時要呼叫的函式。doc 是此選項的單行描述。anon_fun 會在匿名參數上呼叫。 specanon_fun 中的函式會依照其參數在命令列上出現的順序呼叫。

如果發生錯誤,Arg.parse 會在將錯誤訊息列印到標準錯誤後結束程式,訊息如下

  • 錯誤原因:未知的選項、無效或遺失的參數等。
  • usage_msg
  • 選項清單,每個選項後面都跟著對應的 doc 字串。注意:具有空白 doc 字串的選項將不會包含在清單中。

為了讓使用者能夠指定以 - 開頭的匿名參數,請在 speclist 中加入例如 ("-"String anon_fun, doc)

預設情況下,parse 會識別兩個 unit 選項,-help--help,這兩個選項會將 usage_msg 和選項清單列印到標準輸出,並結束程式。您可以透過在 speclist 中指定您自己的 -help--help 選項來覆寫此行為。

val parse_dynamic : (key * spec * doc) list ref ->
anon_fun -> usage_msg -> unit

Arg.parse 相同,不同之處在於 speclist 參數是一個參考,並且可以在解析期間更新。此功能的一個典型用法是解析以下形式的命令列

  • command subcommand options,其中選項清單取決於 subcommand 參數的值。
val parse_argv : ?current:int ref ->
string array ->
(key * spec * doc) list -> anon_fun -> usage_msg -> unit

Arg.parse_argv ~current args speclist anon_fun usage_msg 會解析陣列 args,就像它是命令列一樣。它會使用並更新 ~current (如果提供) 或 Arg.current 的值。您必須在呼叫 parse_argv 之前設定它。current 的初始值是陣列中程式名稱 (參數 0) 的索引。如果發生錯誤,Arg.parse_argv 會引發 Arg.Bad,並將錯誤訊息作為參數。如果給定選項 -help--helpArg.parse_argv 會引發 Arg.Help,並將說明訊息作為參數。

val parse_argv_dynamic : ?current:int ref ->
string array ->
(key * spec * doc) list ref ->
anon_fun -> string -> unit

Arg.parse_argv 相同,不同之處在於 speclist 參數是一個參考,並且可以在解析期間更新。請參閱 Arg.parse_dynamic

val parse_and_expand_argv_dynamic : int ref ->
string array ref ->
(key * spec * doc) list ref ->
anon_fun -> string -> unit

Arg.parse_argv_dynamic 相同,不同之處在於 argv 參數是一個參考,並且可以在解析 Expand 參數期間更新。請參閱 Arg.parse_argv_dynamic

val parse_expand : (key * spec * doc) list -> anon_fun -> usage_msg -> unit

Arg.parse 相同,不同之處在於允許 Expand 參數,並且不會更新 Arg.current 參考。

exception Help of string

當使用者要求說明時,由 Arg.parse_argv 引發。

exception Bad of string

specanon_fun 中的函式可以引發 Arg.Bad 並提供錯誤訊息,以拒絕無效的參數。Arg.parse_argv 在發生錯誤時也會引發 Arg.Bad

val usage : (key * spec * doc) list -> usage_msg -> unit

Arg.usage speclist usage_msg 會將包含有效選項清單的錯誤訊息列印到標準錯誤。這與 Arg.parse 在發生錯誤時列印的訊息相同。speclistusage_msgArg.parse 的相同。

val usage_string : (key * spec * doc) list -> usage_msg -> string

傳回與提供相同參數時 Arg.usage 將會列印的訊息。

val align : ?limit:int ->
(key * spec * doc) list -> (key * spec * doc) list

透過根據關鍵字的長度在第一個對齊分隔符號 (跳格字元或如果找不到跳格字元則為空格) 插入空格來對齊文件字串。如果您想對齊整個字串,請在 doc 字串中使用對齊分隔符號作為第一個字元。對應於 Symbol 參數的 doc 字串會在下一行對齊。

limit:關鍵字和訊息長度超過 limit 的選項將不會用於計算對齊。
val current : int ref

正在處理的參數在 Sys.argv 中的位置。您可以變更此值,例如強制 Arg.parse 跳過某些參數。Arg.parse 使用 Arg.current 的初始值作為參數 0 (程式名稱) 的索引,並從下一個元素開始解析參數。

val read_arg : string -> string array

Arg.read_arg file 從檔案 file 讀取以換行符號終止的命令列參數。

val read_arg0 : string -> string array

Arg.read_arg 相同,但假設命令列參數以空字元終止。

val write_arg : string -> string array -> unit

Arg.write_arg file args 將參數 args 以換行符號終止寫入檔案 file。如果 args 中的任何參數包含換行符號,請改用 Arg.write_arg0

val write_arg0 : string -> string array -> unit

Arg.write_arg 相同,但使用空字元而不是換行符號作為終止符號。