2010-12-13 25 views
5

Basit bir soru ... Tupl'ler ile 1 parametreden daha fazlasını kabul eden bir işlevi tanımlamak iyi bir uygulama mıdır?F # fonksiyonlarında parametrelerin tanımlanması, tupllerin kullanılması daha mı iyidir?

Kendimi daha iyi açıklamak:

let myfunc par1 par2 = ...;; 

o kadar için iyi mi: Ben bir işlevi var?

let myfunc (par1, par2) = ...;; 

"İyi mi" dediğimde: İyi bir uygulama mı? HERHANGİ bir işlevi parametrelere aktarmak için ortak bir uygulama olarak yapmak iyi mi?

cevap

5

Normal F # tarzı fonksiyonları yani ilk örneğe göre olmayan tupled, curried tanımlamaktır teşekkür ederiz.

Currying Bunu olanak verir: ("kısmi uygulama")

let myfunc par1 par2 = ... 
let myfuncHello = myfunc "Hello" 
myfuncHello "World" // same as: myfunc "Hello" "World" 

Ancak haricinde curried işlevleri çağırmak için zor olacağından, tupling ile sopa, F # dışındaki dilleri .NET için kodunuzu maruz eğer F # dan.

Düzenleme: yepyeni F # Snippet'ler sitesinden: ah ... bir soru üzgün yararlı tupled notasyonu olduğu http://fssnip.net/I

+0

Ah tamam ... şimdi görebilirsiniz: böylece ilk gösterim tımar denir? (Hala cevabınızı kabul edemem çünkü 5 dakika beklemem gerekir :)). – Andry

+1

Doğru: ilk gösterimde, bir curried işlevi tanımladınız; myfunc curried. Cevabımda yaptığım gibi aradığında, kısmen uyguladın. Bu terimler genellikle şaşkın: http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application –

+0

Evet, daha önce okudum, çok soğuk bir şekilde ... Çok teşekkürler. – Andry

İlgili konular