用F#更加惯用

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)

有没有更好的方法来做这些(例如使用'>>'或高阶功能)?

Tom*_*cek 7

我不认为你的代码有任何非惯用语.在我看来,关于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)

但同样,这只有在您确实需要使用大量支票或经常添​​加支票时才有意义.不必要的抽象也是一件坏事.