Alo*_*zcz 2 f# functional-programming idiomatic function-composition
我正在尝试做的一个非常简单的例子:我知道可以写:
let myFunc = anotherFunc
Run Code Online (Sandbox Code Playgroud)
代替
let myFunc = fun x -> anotherFunc x
Run Code Online (Sandbox Code Playgroud)
我有两个函数fDate1,fDate2 - 都是DateTime - > bool.我需要构造一个函数,它接受一个日期并验证fDate1,fDate2是否返回true.现在我发明了以下表达式:
let myDateFunc = fun x -> (fDate1 x) || (fDate2 x)
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做这些(例如使用'>>'或高阶功能)?
我不认为你的代码有任何非惯用语.在我看来,关于F#的一个优点是你可以用它来编写简单易懂的代码.从这个角度来看,没有什么比写作更简单了:
let myDateFunc x = fDate1 x || fDate2 x
Run Code Online (Sandbox Code Playgroud)
如果你有比两个更多的功能,那么写下这样的东西可能是有意义的:
let dateChecks = [ fDate1; fDate2 ]
let myDateFunc x = dateChecks |> Seq.exists (fun f -> f x)
Run Code Online (Sandbox Code Playgroud)
但同样,这只有在您确实需要使用大量支票或经常添加支票时才有意义.不必要的抽象也是一件坏事.