F#块参数

时间:2009-11-08 18:13:44

标签: f#

C#有匿名代表。所以我可以写:

public vois foo(string d, Action t){
    t();
}

在红宝石中:

def foo d
  yield
end

如何在F#中做同样的事情?首选语法为:

foo "dfdfdf" { do something here }

由于

3 个答案:

答案 0 :(得分:6)

您的第一个示例不是匿名方法 - 它只是通过委托传递和调用(可能引用命名或匿名方法)。要在F#中执行此操作,只需提供并调用函数参数:

let foo n f = f n

let square n = n * n
let result = foo 123 square
printfn "%A" result

要在F#中创建等效的匿名方法,请使用fun关键字:

let result2 = foo 123 (fun n -> n * n)

答案 1 :(得分:2)

查看有关Higher Order Functions in F#的这篇文章。高阶函数是接受其他函数作为参数的函数,听起来就像你描述的概念。

答案 2 :(得分:1)

open System

// create a function that expects an Action delegate and executes it
let foo (actionDelegate:Action) (s:String) = actionDelegate.Invoke();

// create a function that meets Action delegate
let ActionFunction param = Console.Write("Action in action")

// call foo passing ActionFunction
foo (new Action(ActionFunction)) "my string"