2010-12-13 7 views
5

Proste pytanie ... Czy dobrze jest zdefiniować funkcję akceptującą więcej niż 1 parametr za pomocą krotek?Definiowanie parametrów w funkcjach F #, czy lepiej używać krotek?

mi wytłumaczyć lepiej: Mam funkcję:

let myfunc par1 par2 = ...;; 

dobrze jest na tak?

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

Kiedy mówię "czy to dobrze", mówię: czy to dobra praktyka? czy dobrze jest robić to ZAWSZE jako powszechną praktykę przekazywania parametrów funkcji?

Dziękuję

Odpowiedz

5

Normalny F # styl jest zdefiniowanie funkcji curry, czyli non-tupled według pierwszego przykładu.

currying pozwala to zrobić: ("częściowy stosowania")

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

Jeśli jednak narazić swój kod .NET języków innych niż F #, trzymać z tupling, ponieważ trudno jest wywołanie funkcji curried wyjątkiem z F #.

Edit: z zupełnie nowym miejscu F # Fragmenty: http://fssnip.net/I

+0

Ah ok ... teraz widzę, gdzie jest przydatna notacja tupled ... ah przepraszam jedno pytanie: więc pierwszy zapis jest nazywany Zmiękczanie? (Nadal nie mogę zaakceptować twojej odpowiedzi, ponieważ muszę poczekać 5 minut :)). – Andry

+1

To prawda: w pierwszej notacji zdefiniowałeś funkcję curry; myfunc jest curry. Kiedy nazywasz to tak, jak zrobiłem to w mojej odpowiedzi, częściowo go zastosowałeś. Terminy te są powszechnie mylone: ​​http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application –

+0

Tak, czytałem to już wcześniej, to bardzo fajne curry ... Wielkie dzięki. – Andry

Powiązane problemy