2016-03-01 11 views
6

- возможно ли перенести первый параметр в функцию с несколькими параметрами? , напримерF # pipe первый параметр

date = "20160301" 

Возможно ли это к трубе date в

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

ответ

9

Как @yuyoyuppe объясняет в his/her answer, вы не можете напрямую проехать в ParseExact, потому что это метод и, тем самым, не карри.

Это часто хороший вариант, чтобы определить каррированную функцию адаптера, но вы можете также трубы в анонимную функцию, если вам это нужно только на местном уровне:

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

, который дает вам DateTime значения:

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

От this:

методы обычно используют кортеж формы передачи аргументов. Это дает более четкий результат с точки зрения других языков .NET, потому что форма кортежа соответствует способу передачи аргументов в методах .NET.

Поскольку вы не можете снискать функцию, которая принимает кортеж напрямую, вам придется обернуть ParseExact, чтобы сделать это:

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

Возможно несвязанные, но выходные аргументы могут быть связаны так:

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

Отметьте, что TryParse принимает кортеж со вторым аргументом как byref.