慣用的な機能リストを使用したい場合は、次のように記述できます。
let func (param:(int64 * string) list) =
[ for n, s in param -> n, s, "new val" ]
(int64 * string) list
C# の型と同じ型を取得できるように、注釈を追加しました。追加しなかった場合、F# コンパイラは関数がジェネリックであると推論します。これは、タプルの最初の 2 つの要素の型が実際には問題にならないためです。param:list<int64 * string>
注釈は、読みやすいC# スタイルの表記法で記述することもできます。
.NETList
型 (F# では通常は推奨されません) を使用する場合は、F# エイリアスResizeArray
を使用して次のように記述できます。
let func (param:(int64 * string) ResizeArray) =
ResizeArray [ for n, s in param -> n, s, "new val" ]
これにより、F# リストが作成され、.NETList<T>
型に変換されます。これにより、C# バージョンとまったく同じパブリック IL 署名が得られるはずですが、F# 固有の型を使用することをお勧めします。
補足として、2 番目の例は命令型 F# コードを使用して実装できます ( for
C# のように要素を反復処理するために使用します)。これは C# とまったく同じ IL を生成しますが、これは主に、後で F# コードを最適化する必要がある場合に役立ちます。したがって、このバージョンはお勧めしません (これも長いです :-)):
let func (param:(int64 * string) ResizeArray) =
let res = new ResizeArray<_>()
for n, s in param do
res.Add(n, s, "new val")
res
次のような高階関数を使用することもできますList.map
。
let func (param:(int64 * string) list) =
params |> List.map (fun (n, s) -> n, s, "new val")