F#管道第一个参数

时间:2016-03-01 07:03:34

标签: parameters f# pipe currying

是否可以将第一个参数传递给多参数函数? 例如

date

是否可以将DateTime.ParseExact( , "yyyyMMDD", CultureInfo.InvariantCulture) 导入

0.974

2 个答案:

答案 0 :(得分:9)

正如@yuyoyuppe在his/her answer中解释的那样,你不能直接管道进入ParseExact,因为它是一种方法,因而不是咖喱。

定义一个curried的适配器函数通常是个不错的选择,但是如果你只需要在本地使用它,你也可以使用它来管道:

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

为您提供DateTime值:

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

答案 1 :(得分:8)

来自this

  

方法通常使用传递参数的元组形式。这实现了   从其他.NET语言的角度来看,结果更清晰,因为   元组表单与.NET方法中传递参数的方式相匹配。

由于你不能直接接受一个接受元组的函数,你必须包装ParseExact来做那个:

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

也许不相关,但输出参数可以这样绑定:

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

请注意,TryParse接受第二个参数为byref的元组。