2016-03-01 11 views
6

ist es möglich, den ersten Parameter in eine Mehrfachparameterfunktion zu leiten? zum BeispielF # Pipe erster Parameter

date = "20160301" 

Ist das möglich Rohr date in

DateTime.ParseExact( , "yyyyMMDD", CultureInfo.InvariantCulture) 

Antwort

9

Wie @yuyoyuppe in his/her answer erklärt, können Sie nicht direkt in ParseExact Pipeline, weil es eine Methode ist, und damit nicht curried.

Es ist oft eine gute Option, um eine Curry-Adapter-Funktion zu definieren, aber Sie können auch über die Pipeline in eine anonyme Funktion, wenn Sie es nur vor Ort benötigen:

let res = 
    date |> (fun d -> DateTime.ParseExact(d, "yyyyMMdd", CultureInfo.InvariantCulture)) 

, die Ihnen einen DateTime Wert gibt:

> res;; 
val it : DateTime = 01.03.2016 00:00:00 
7

Von this:

Methoden in der Regel das Tupel Form des Führens Argumente verwenden. Dies ergibt ein deutlicheres Ergebnis aus der Perspektive anderer .NET-Sprachen, da die Tupelform der Art entspricht, wie Argumente in .NET-Methoden übergeben werden.

Da kann man nicht eine Funktion Curry, die direkt Tupel akzeptiert, werden Sie die ParseExact wickeln müssen zu tun, dass:

let parseExact date = DateTime.ParseExact(date, "yyyyMMDD", CultureInfo.InvariantCulture) 

Vielleicht nicht verwandte, aber Ausgang Argumente wie die gebunden werden können:

Beachten Sie, dass TryParse das Tupel mit dem zweiten Argument als byref akzeptiert.