2012-07-09 43 views
6

私は、F#に引数、カリースタイル、タプルスタイルを渡す2つの方法があると常に考えてきました。 これは実際には正しいですか?F#パラメータの受け渡し

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

someFunc (a,b) = 

これはタプルであることを起こる1つのカレーstyle引数を持つ関数ではないでしょうか? したがって、pipleline演算子を使ってこの関数にタプルを渡すことができますか? (タプルの要素に名前が付いている場合)

(1,2) |> someFunc 

は、この正しいですか?

答えて

6

これはうまく動作します - あなたは

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

を持っているときの違いは、あなたは簡単に部分的に適用されたF2を作成することができますされていますが、Fのためにそれはかなりのようにうまく動作しません - あなたは

をしなければなりません
+0

はい、これは単に "f"に名前付き要素のタプルである_one_引数があるためですか?私はあなたが "somefunc abc(d、e、f)g"のようなファンキーなことをすることができるということを意味しています。これは明らかに純粋なカレースタイルでもなく、F#はカリースタイルしか持たず、これは正しい考え方ですか? –

+0

これは正しいです。 –

4

はい、すべてF#機能は「カレースタイル」です。あなたのような定義を持っている場合:

let someFunc (a,b) = a + b 

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

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

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

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

ただし、F# methodsは「タプルスタイル」です(これは、標準の.NETオブジェクト指向機能にF#が付いている場所の1つです)。

関連する問題