6

F# には、カレー スタイルとタプル スタイルの 2 つの引数を渡す方法があるといつも思っていました。これは果たして正しいのでしょうか?

単純に1 つのスタイルではないか、カレー スタイルであり、引数は単純な値またはタプルのいずれかです。

例えば

someFunc (a,b) =

これは、たまたまタプルであるカレースタイルの引数を1つ持つ関数ではありませんか? したがって、パイプライン演算子を使用してこの関数にタプルを渡すことができますか? (タプルの要素の名前が付けられている場所)

(1,2) |> someFunc

これは正しいです?

4

2 に答える 2

6

これは問題なく機能します-違いはあなたが持っているときです

let f (a,b) = ...
let f2 a b = ...

そうすれば、部分的に適用されたf2を簡単に作成できますが、fの場合は、それほどうまく機能しません。

let partial = fun t -> f (1,t)
let partial2 = f2 1
于 2012-07-09T09:43:52.157 に答える
6

はい、すべての F#関数は「カレー スタイル」です。次のような定義がある場合:

let someFunc (a,b) = a + b

パターン マッチングによって分解される 1 つの引数 (タプル) を取る関数があります(そうです、パターン マッチングはこのような驚くほど甘い場所で利用できます)。これは、パターン マッチングを関数の本体に移動する次の定義と同等です。

let someFunc t = 
    match t with 
    | a, b -> a + b

これはまた同等です

let someFunc = function
    | a, b -> a + b

引数自体にパターン マッチングを使用する最初のバージョンは、単純な名前付きバインディングのこのインスタンスでは明らかに望ましいものです。

ただし、 F#メソッドは「タプル スタイル」であることに注意してください(これは、F# が標準の .NET オブジェクト指向機能に組み込まれている場所の 1 つです)。

于 2012-07-09T15:08:28.660 に答える