web-dev-qa-db-ja.com

OCaml |>演算子

|>演算子の機能を誰かが説明できますか?このコードは参照から取得されました ここ

let m = PairsMap.(empty |> add (0,1) "hello" |> add (1,0) "world")

それが何をするかはわかりますが、それ以外の方法で|>演算子を適用する方法がわかりません。

さらに言えば、Module。()構文が何をしているのかわかりません。それについての説明もいいでしょう。

19
eatonphil

Module.(e)は_let open Module in e_と同等です。スコープ内で物事を紹介するための省略構文です。

演算子_|>_は、モジュールPervasiveslet (|>) x f = f xとして定義されています。 (実際、これは外部プリミティブとして定義されており、コンパイルが簡単です。これはここでは重要ではありません。)連続する呼び出しをチェーンするのを容易にするのは逆アプリケーション関数です。それがなければ、あなたは書く必要があるでしょう

_let m = PairsMap.(add (1,0) "world" (add (0,1) "hello" empty))
_

より多くの括弧が必要です。

23
byako

_|>_演算子は、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_を使用する必要があります。

13

_|>_演算子は、逆関数適用を表します。複雑に聞こえますが、関数(およびおそらくいくつかの追加パラメーター)を配置できることを意味します適用する値。これにより、Unixパイプラインのようなものを構築できます。

_# let ( |> ) x f = f x;;
val ( |> ) : 'a -> ('a -> 'b) -> 'b = <fun>
# 0.0 |> sin |> exp;;
- : float = 1.
_

表記Module.(expr)は、1つの式に対してモジュールを一時的に開くために使用されます。つまり、モジュール名の前に付けることなく、モジュールの名前を式で直接使用できます。

7