2016-06-24 14 views
2

Gibt es eine Möglichkeit, Tupel in separate Parameter zu konvertieren und sie in Funktion zu bringen, anstatt an Variablen zu binden?F # Tupel in Funktionsparameter

So etwas wie

let nice funOf5 tupleOf5 = 
    funOf5 (Tuple.toParameters tupleOf5) 

statt

let ugly funOf5 tupleOf5 = 
    let (number1, number2, number3, number4, number5) = tupleOf5 
    funOf5 number1 number2 number3 number4 number5 

Dank.

+2

für 2 oder 3 Mitglied Tupel können Sie 'verwenden <||' und '< ||| ', https: //msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/operators.%5b-%5bhh-%5d%5b%27t1%2c%27t2%2c%27u%5d-function- % 5bfsharp% 5d –

+0

@John Palmer Oh, danke, ich wusste, dass Argumente wie (arg1, arg2) für die Verwendung von Pipes geschrieben werden sollten, aber ich habe nicht vermutet, dass es auch ein Tupel ist – Feofilakt

+0

Beachten Sie, dass es '<||' nicht '<|' –

Antwort

2

Eine Lösung besteht darin, Mustererkennung in der Funktionsdefinition zu verwenden.

Dies wird durch die std lib Lösung für |||> inspiriert, die

let inline (|||>) (x1,x2,x3) f = f x1 x2 x3 

ist, dann können Sie

haben
let inline funof5 (x1,x2,x3,x4,x5) f = f x1 x2 x3 x4 x5