2017-05-12 95 views
3

我試圖將多個參數傳遞給Julia |>中的內置管道操作符。Julia:有多個參數的管道操作符|>

我想的東西是這樣的:

join([randstring() for i in 1:100], " ") 

然而,使用管道運營商,我得到一個錯誤,而不是:

[randstring() for i in 1:100] |> join(" ") 

我敢肯定這是多重的功能帶有自己的方法的調度delimjoin(strings, delim, [last])方法中被省略時定義爲delim=""

我能理解這個嗎?有沒有解決辦法?

爲什麼我的大部分使用管道最終會採用多個參數。例如:

[randstring() for i in 1:100] |> join(" ") |> replace("|", " ") 

回答

5

管道操作員不會做任何神奇的事情。它只是取左邊的值並將它們應用於右邊的函數。正如你所發現的,join(" ")不會返回一個函數。一般來說,Julia函數的部分應用程序不會返回函數 - 它可能意味着不同的東西(通過多次調度)或者它會是一個錯誤。

有跡象表明,讓你支持這幾個選項:

  • 明確創建匿名函數:

    [randstring() for i in 1:100] |> x->join(x, " ") |> x->replace(x, "|", " ") 
    
  • 使用宏,使你要找的那種特殊的魔力。有一些軟件包支持這種事情。

+1

WRT宏:我維護一個列表:https://github.com/JuliaLang/julia/issues/5571#issuecomment-205754539 –