2017-05-12 10 views
3

ジュリア|>の組み込みパイピング演算子に複数の引数を渡そうとしています。Julia:複数の引数を持つ配管演算子|>

私はこのように動作します何か希望:しかし、配管演算子を使用して、私が代わりにエラーを取得する

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

を:

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

私は、これは複数の特徴であるかなり確信しています省略された場合、join(strings, delim, [last])メソッドのdelimという独自のメソッドを持つ結合をディスパッチすると、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でリストを維持しています。 –

    関連する問題