OCaml |> 运算符
OCaml |> operator
谁能解释一下 |> 运算符的作用?此代码取自参考 here:
let m = PairsMap.(empty |> add (0,1) "hello" |> add (1,0) "world")
我知道它的作用,但我不知道如何应用 |> 运算符。
就此而言,我也不知道 Module.() 语法在做什么。对此的解释也很好。
|>
运算符表示反向函数应用。这听起来很复杂,但它只是意味着您可以将函数(可能还有一些额外的参数)放在您想要应用它的值之后。这使您可以构建看起来像 Unix 管道的东西:
# let ( |> ) x f = f x;;
val ( |> ) : 'a -> ('a -> 'b) -> 'b = <fun>
# 0.0 |> sin |> exp;;
- : float = 1.
表示法Module.(expr)
用于为one表达式临时打开模块。换句话说,您可以直接在表达式中使用模块中的名称,而无需在模块名称前加上前缀。
|>
运算符看起来像 bash 中的 |
。
基本思路是
e |> f = f e
这是一种按执行顺序编写应用程序的方法。
作为一个例子,你可以使用它(虽然我并不特别认为你应该这样做)来避免让:
12 |> fun x -> e
而不是
let x = 12 in e
对于Module.()
的事情,就是使用给定模块的特定功能。
您可能以前看过 List.map
。
您当然可以使用 open List
,然后仅使用 map
引用该函数。但是如果你之后还 open Array
,map
现在指的是 Array.map
所以你需要使用 List.map
.
Module.(e)
等同于let open Module in e
。这是一个 shorthand 语法来引入范围内的东西。
运算符 |>
在模块 Pervasives
中定义为 let (|>) x f = f x
。 (实际上,它被定义为一个外部原语,更容易编译。这在这里并不重要。)它是 reverse application 函数,可以更容易地链接连续调用。没有它,你需要写
let m = PairsMap.(add (1,0) "world" (add (0,1) "hello" empty))
需要更多括号。
谁能解释一下 |> 运算符的作用?此代码取自参考 here:
let m = PairsMap.(empty |> add (0,1) "hello" |> add (1,0) "world")
我知道它的作用,但我不知道如何应用 |> 运算符。
就此而言,我也不知道 Module.() 语法在做什么。对此的解释也很好。
|>
运算符表示反向函数应用。这听起来很复杂,但它只是意味着您可以将函数(可能还有一些额外的参数)放在您想要应用它的值之后。这使您可以构建看起来像 Unix 管道的东西:
# let ( |> ) x f = f x;;
val ( |> ) : 'a -> ('a -> 'b) -> 'b = <fun>
# 0.0 |> sin |> exp;;
- : float = 1.
表示法Module.(expr)
用于为one表达式临时打开模块。换句话说,您可以直接在表达式中使用模块中的名称,而无需在模块名称前加上前缀。
|>
运算符看起来像 bash 中的 |
。
基本思路是
e |> f = f e
这是一种按执行顺序编写应用程序的方法。
作为一个例子,你可以使用它(虽然我并不特别认为你应该这样做)来避免让:
12 |> fun x -> e
而不是
let x = 12 in e
对于Module.()
的事情,就是使用给定模块的特定功能。
您可能以前看过 List.map
。
您当然可以使用 open List
,然后仅使用 map
引用该函数。但是如果你之后还 open Array
,map
现在指的是 Array.map
所以你需要使用 List.map
.
Module.(e)
等同于let open Module in e
。这是一个 shorthand 语法来引入范围内的东西。
运算符 |>
在模块 Pervasives
中定义为 let (|>) x f = f x
。 (实际上,它被定义为一个外部原语,更容易编译。这在这里并不重要。)它是 reverse application 函数,可以更容易地链接连续调用。没有它,你需要写
let m = PairsMap.(add (1,0) "world" (add (0,1) "hello" empty))
需要更多括号。