“$”在 OCaml 语法中是什么意思?
what does '$' mean in OCaml synax?
我是 OCaml 新手。我看到类似
的代码
let main_t = Term.(pure main $ address $ port $ pid_file $ log_file $ dbConf)
“$”符号是什么意思?
$在标准ocaml中没有特殊含义。在您的情况下,这来自可以定义特定语法的 Term 模块。 (顺便说一句,它是哪个模块?-我的意思是你是如何安装它的)
$
在 OCaml 中没有预定义的含义。它可以定义为中缀运算符;含义必须来自您正在使用的库。
如果非要我猜的话,我会说 $
已被定义为低优先级函数应用程序运算符。它在 Haskell 中用于此目的,而且通常非常方便。
在 OCaml 中,可以定义您自己的中缀和前缀运算符。在 cmdliner
库中,运算符 $
定义为:
val ( $ ) : ('a -> 'b) t -> 'a t -> 'b t
(** [f $ v] is a term that evaluates to the result of applying
the evaluation of [v] to the one of [f]. *)
实际上是apply
函数的中缀形式(在Cmdliner中命名为app
)。它用于累积参数。基本上,pure f $a $b $c $d
形式的构造接受一个函数 f
,该函数采用 a
、b
、c
和 d
类型的四个参数,假设 a
是 a Term.t
类型的值,b
是 b Term.t
类型的值,等等。一般来说,这是构建类型安全可变参数函数的模式。有关模式的更多信息,请阅读 Applicative Programming with Effects 论文。
我是 OCaml 新手。我看到类似
的代码let main_t = Term.(pure main $ address $ port $ pid_file $ log_file $ dbConf)
“$”符号是什么意思?
$在标准ocaml中没有特殊含义。在您的情况下,这来自可以定义特定语法的 Term 模块。 (顺便说一句,它是哪个模块?-我的意思是你是如何安装它的)
$
在 OCaml 中没有预定义的含义。它可以定义为中缀运算符;含义必须来自您正在使用的库。
如果非要我猜的话,我会说 $
已被定义为低优先级函数应用程序运算符。它在 Haskell 中用于此目的,而且通常非常方便。
在 OCaml 中,可以定义您自己的中缀和前缀运算符。在 cmdliner
库中,运算符 $
定义为:
val ( $ ) : ('a -> 'b) t -> 'a t -> 'b t
(** [f $ v] is a term that evaluates to the result of applying
the evaluation of [v] to the one of [f]. *)
实际上是apply
函数的中缀形式(在Cmdliner中命名为app
)。它用于累积参数。基本上,pure f $a $b $c $d
形式的构造接受一个函数 f
,该函数采用 a
、b
、c
和 d
类型的四个参数,假设 a
是 a Term.t
类型的值,b
是 b Term.t
类型的值,等等。一般来说,这是构建类型安全可变参数函数的模式。有关模式的更多信息,请阅读 Applicative Programming with Effects 论文。