C#有匿名代表。所以我可以写:
public vois foo(string d, Action t){
t();
}
在红宝石中:
def foo d
yield
end
如何在F#中做同样的事情?首选语法为:
foo "dfdfdf" { do something here }
由于
答案 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"