tes*_*060 6 parameters f# pipe currying
可以将第一个参数传递给多参数函数吗?例如
date = "20160301"
Run Code Online (Sandbox Code Playgroud)
这有可能date进入
DateTime.ParseExact( , "yyyyMMDD", CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)
正如@yuyoyuppe在他/她的回答中解释的那样,你不能直接进入管道,ParseExact因为它是一种方法,因而不是咖喱.
这通常是定义curried适配器函数的一个很好的选择,但是如果你只需要在本地使用它,你也可以管道进入匿名函数:
let res =
date |> (fun d -> DateTime.ParseExact(d, "yyyyMMdd", CultureInfo.InvariantCulture))
Run Code Online (Sandbox Code Playgroud)
它给你一个DateTime价值:
> res;;
val it : DateTime = 01.03.2016 00:00:00
Run Code Online (Sandbox Code Playgroud)
从这个:
方法通常使用传递参数的元组形式.从其他.NET语言的角度来看,这可以获得更清晰的结果,因为元组形式与.NET方法中传递参数的方式相匹配.
既然你不能直接接受一个接受元组的函数,那么你必须用它来包装ParseExact:
let parseExact date = DateTime.ParseExact(date, "yyyyMMDD", CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)
也许不相关,但输出参数可以这样绑定:
let success, value = Double.TryParse("2.5")
Run Code Online (Sandbox Code Playgroud)
注意,TryParse接受带有第二个参数的元组为byref.