2016-03-01 36 views
6

è possibile inserire il primo parametro in una funzione a parametri multipli? per esempioF # pipe first parameter

date = "20160301" 

È possibile che il tubo date in

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

risposta

9

Come spiega @yuyoyuppe in his/her answer, non è possibile eseguire il piping direttamente in ParseExact perché è un metodo e pertanto non viene elaborato.

E 'spesso una buona opzione per definire una funzione adattatore al curry, ma si può anche tubi in una funzione anonima se solo bisogno localmente:

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

che ti dà un valore DateTime:

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

Da this:

Metodi di solito usano la forma tupla di passaggio di argomenti. Ciò ottiene un risultato più chiaro dal punto di vista di altri linguaggi .NET perché il modulo tupla corrisponde al modo in cui gli argomenti vengono passati nei metodi .NET.

Poiché non è possibile curry una funzione che accetta tupla direttamente, dovrete avvolgere il ParseExact per farlo:

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

Forse non collegati, ma gli argomenti di uscita possono essere vincolati così:

let success, value = Double.TryParse("2.5") 

Nota che TryParse accetta la tupla con il secondo argomento come byref.