【问题标题】:Pass functions in F#在 F# 中传递函数
【发布时间】:2010-09-07 19:52:24
【问题描述】:

是否可以将一个函数的引用传递给 F# 中的另一个函数?具体来说,我想传递 lambda 函数,如

foo(fun x -> x ** 3)

更具体地说,我需要知道如何在我自己编写的函数中引用传递的函数。

【问题讨论】:

    标签: f# functional-programming lambda


    【解决方案1】:

    是的,这是可能的。 manual 有这个例子:

    > List.map (fun x -> x % 2 = 0) [1 .. 5];;
    
    val it : bool list
    = [false; true; false; true; false]
    

    【讨论】:

      【解决方案2】:

      函数是 F# 中的一等公民。因此,您可以随意传递它们。

      如果你有这样的功能:

      let myFunction f =
          f 1 2 3
      

      f 是函数,那么 myFunction 的返回值是 f 应用于 1,2 和 3。

      【讨论】:

      • 如果您想要两个函数作为 myFunction 的输入怎么办?
      【解决方案3】:

      将 lambda 函数传递给另一个函数的工作方式如下:

      假设我们自己有一个简单的函数,如下所示:

      let functionThatTakesaFunctionAndAList f l = List.map f l
      

      现在您可以向它传递一个 lambda 函数和一个列表:

      functionThatTakesaFunctionAndAList (fun x -> x ** 3.0) [1.0;2.0;3.0]
      

      在我们自己的函数functionThatTakesaFunctionAndAList 中,您可以将lambda 函数称为f,因为您调用了第一个参数f

      函数调用的结果当然是:

      float list = [1.0; 8.0; 27.0]
      

      【讨论】:

        猜你喜欢
        • 2016-05-16
        • 2019-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多