F#管道第一个参数

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)

Mar*_*ann 9

正如@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)


yuy*_*ppe 8

这个:

方法通常使用传递参数的元组形式.从其他.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.