2012-07-09 47 views
6

我一直認爲F#有兩種不同的方法來傳遞參數,咖喱風格和元組風格。 這實際上是正確的嗎?F#參數傳遞

是不是簡單一種風格,咖喱風格和參數可以是簡單的值或元組。

例如

someFunc (a,b) = 

這不就是跟一個咖喱風格參數的函數這恰好是一個元組? 因此,允許我使用pipleline運算符將元組傳遞給此函數? (其中元組的元素被命名)

(1,2) |> someFunc 

這是正確的嗎?

回答

6

這會工作得很好 - 所不同的是,當你有

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

,那麼你可以很容易地創建一個部分應用的F2,但是對於f它並不完全因爲工作得很好 - 你必須做

let partial = fun t -> f (1,t) 
let partial2 = f2 1 
+0

是的,而不是這只是因爲「f」有_one_參數碰巧是一個具有命名元素的元組?我的意思是你可以做一些時髦的東西,比如「somefunc abc(d,e,f)g」,這顯然不是純粹的咖喱或者typle風格,這讓我相信F#只有咖喱風格,其中參數只是數值或元組。這是想想它的正確方法嗎? – 2012-07-09 09:54:16

+0

這是正確的。 – 2012-07-09 10:24:22

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是「元組樣式」(這是F#粘合到標準.NET面向對象功能的地方之一)。