F#: String.Join と |> 演算子 質問する

F#: String.Join と |> 演算子 質問する

F#インタラクティブではString.Join("+", ["a"; "b"])正常に使用できますが、

["a"; "b"] |> String.Join "+"

エラーが発生します:

Script1.fsx(79,15): error FS0001: This expression was expected to have type
    string list -> 'a    
but here has type
    string

String.Joinパイプラインを使用してコレクションを渡すにはどうすればよいですか?

PS同じ問題はlines |> File.WriteAllLines "filename.txt"

ベストアンサー1

String.Joinは.NETメソッドです。.NETメソッドを使用する場合、F#はそれをタプルを引数として受け取る関数として扱います(呼び出すときはパラメータを と記述しますf(a, b))。|>演算子は、カレー化形式パラメータ ( と書いて呼び出すこともできますf a b)。

String.concat代わりに、同じことを実行する F# ライブラリの関数を使用することもできます。

["a"; "b"] |> String.concat "+"

編集 File.WriteAllLines同じケースです。パイプラインの一部として使用したい場合は、呼び出しをラップする F# 関数を記述できます。

let writeAllLines file (lines:seq<string>) =
  System.IO.File.WriteAllLines(file, lines)

一般に、|>すべての引数を演算子の左側に記述する場合にのみ、.NET メソッドを使用できます。たとえば、次のように記述できます。

("+", ["a"; "b"]) |> System.String.Join

... しかし、これはパイプライン演算子の通常の使用法には適合しません。.NET API を使用する場合、パイプラインは関数ライブラリでのみ適切に機能するため、通常は C# のようなプログラミング スタイル (パイプラインなし) を使用する方が適切です。

おすすめ記事