模块 Stdlib.Arg

module Arg: Arg

type spec = 
| Unit of (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 识别两个单元选项,-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 其中选项列表取决于子命令参数的值。
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.Bad 也会由 Arg.parse_argv 在出现错误时抛出。

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

通过在第一个对齐分隔符(制表符或,如果未找到制表符,则为空格)处插入空格来对齐文档字符串,空格数取决于关键字的长度。如果要对齐整个字符串,请使用对齐分隔符作为文档字符串的第一个字符。与 Symbol 参数相对应的文档字符串将在下一行对齐。

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 相同,但假设以 null 字符结尾的命令行参数。

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 相同,但使用 null 字符作为终止符而不是换行符。