2015-12-05 34 views
3

我是ocaml的新手,通過了一些教程,並認爲對於下一步,我會通過閱讀一些OOS來熟悉語法。所以我從facebook上下載了Flow運營商'|>'在Facebook的流程

但是,我遇到了一些奇怪的使用'|>'的語法,我無法弄清楚。

首先,我所遇到的「|>」 here

args = CommandSpec.ArgSpec.(
    empty 
    |> flag "--tokens" no_arg 
     ~doc:"Include a list of syntax tokens in the output" 
    |> flag "--pretty" no_arg 
     ~doc:"Pretty-print JSON output" 
    |> CommandUtils.from_flag 
    |> anon "file" (optional string) ~doc:"[FILE]" 
) 

當我在尋找它的定義,我發現這在另一個文件:

let (|>) (o : 'a) (f : 'a -> 'b) : 'b = f o 

但我不太清楚它在做什麼或者甚至是相關的。

你能幫忙嗎?

回答

5
let (|>) (o : 'a) (f : 'a -> 'b) : 'b = f o 

這是聲明瞭一個管道符稱爲|>,你知道是因爲周圍的名字括號的中綴。

它有兩個參數,o具有未知類型'a,和f它是從'a到第二未知類型'b的功能。

|>返回某種類型'b

結果由f o計算。

換句話說,o |> ff o相同。這只是一個骯髒/整潔的技巧,能夠以這種方式在鏈中編寫參數聲明,而不必在所有內容中都放置很多括號。運算符的優先級低,因此它在每個標誌聲明之間起到分隔符的作用。

+1

'你知道這是內聯':是否與其他語言的'中綴'相同? – Laurent

+2

正確的詞是中綴,答案應該是固定的。 – Drup

+2

固定,謝謝你們。 –

3

這是一個(向前)管道操作員。

而不是調用函數它的形式:

f arg 

管道運營商允許你調用它爲:

arg |> f 

這使得鏈接函數調用顯著更易於讀取和寫入。

arg |> f |> g |> h 

VS

h (g (f arg)) 
1

它是管操作者 它允許應用的功能的序列很容易: F(克(HX))可以寫成X |> H |>克| > f。

它的聲明使用圓括號表示它是一箇中綴運算符: x |> f表示f x。