F#调用其参数的标准函数
可能是个新手问题,但有没有像这样的标准函数F#调用其参数的标准函数,f#,F#,可能是个新手问题,但有没有像这样的标准函数 let apply f = f() 在F#?否中,没有用于此的标准函数 在大多数情况下,仅调用函数比使用apply更短、更明显,因此我不完全确定这是否有用: foo () apply foo 现在,您还可以使用|>编写应用程序,但这也不是很好: () |> foo 我想apply唯一有用的地方是: functions |> List.map apply functions |> List.map (fun f -> f (
let apply f = f()
在F#?否中,没有用于此的标准函数 在大多数情况下,仅调用函数比使用
apply
更短、更明显,因此我不完全确定这是否有用:
foo ()
apply foo
现在,您还可以使用|>
编写应用程序,但这也不是很好:
() |> foo
我想apply
唯一有用的地方是:
functions |> List.map apply
functions |> List.map (fun f -> f ())
在这里,没有apply
的版本比较短,但我认为仅仅针对这一个用例在库中拥有一个命名函数是不值得的
实际上,您可以在这里使用|>
来避免的乐趣,这是一种可爱的ASCII艺术:-),但不是我想在我的代码库中看到的东西:
functions |> List.map ((|>) ())
我的用例:我在规则中有一个函数列表,然后搜索第一个与规则列表匹配的函数。选择apply |>list。tryHead
@Mikhail如果你有一个函数列表,它以unit(()
)作为输入,但每次调用它们时都返回不同的结果,那么这些函数就不是。在函数式编程中,您应该尽可能地喜欢纯函数,因此也许可以进行更具功能性的设计。@MarkSeemann他们是纯函数。我通过将参数部分应用于许多函数来构建规则列表,这些函数的最后一个参数是unit
。想想10条不同的规则,每一条都有不同的参数。我应用这些参数,将它们放入一个列表中,然后搜索第一个函数,该函数将生成一些结果unit
只是使函数调用变懒的一种方法。@Mikhail如果需要懒计算,那么F#有lazy
表达式,听起来更适合。。。