3

それで、私は Elixir でストリームを操作し、|> 演算子も操作しました。私は F# で遊んだ経験が豊富なので、とても自然に感じます。だから私はこれを試しました:

1..10 |> Stream.map &(&1 * &1) |> Enum.to_list

最初の 10 個の正方形のリストを吐き出すだけです。しかし、うまくいきませんでした。問題ない; これはうまく機能するため、演算子の優先順位の問題のように見えました:

(1..10 |> Stream.map &(&1 * &1)) |> Enum.to_list

しかし、これは式の前半を括弧で括らずに書き直せるのではないかと思っていました。

4

2 に答える 2

6

あなたの問題は、Stream.map括弧なしで呼び出しているという事実にあると思います。そして、パイプしようとします。認めざるを得ませんが、メカニズムについてはよくわかりませんが、元の呼び出しは次のように解釈されるようです:

1..10 |> Stream.map(&(&1 * &1) |> Enum.to_list)

関数呼び出しで括弧を使用するようにこれを書き直します。

1..10 |> Stream.map(&(&1 * &1)) |> Enum.to_list

個人的には、私は主に関数呼び出しで括弧を使用します。これに対する例外は、引数なしの関数呼び出し、マクロ呼び出し、および時折の IO​​.puts/inspect 呼び出し (通常はデバッグ目的でのみ行います) です。

このアプローチは、あいまいさの可能性を排除するため、特にパイピングの際に非常に役立ちます。

于 2014-03-13T22:26:03.770 に答える