F# - 委托类型

F# - 委托类型 首页 / F#入门教程 / F# - 委托类型

委托(Delegates)是一个引用类型变量,其中包含对方法的引用,可以在运行时更改参考, F#委托类似于 C 或C ++中的函数指针。

委托声明

委托声明确定委托可以引用的方法。

type delegate-typename=delegate of type1 -> type2

如-

//Delegate1 使用元组参数。
type Delegate1=delegate of (int * int) -> int

//Delegate2 使用 curried 参数。
type Delegate2=delegate of int * int -> int

这两个委托都可以用来引用具有两个 int 参数并返回 int 类型变量的任何方法。

链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-delegates.html

来源:LearnFk无涯教程网

用语法-

  • type1 表示参数类型。

  • type2 表示返回类型。

以下示例演示了概念-

type Myclass() =
   static member add(a : int, b : int) =
      a + b
   static member sub (a : int) (b : int) =
      a - b
   member x.Add(a : int, b : int) =
      a + b
   member x.Sub(a : int) (b : int) =
      a - b

//Delegate1 使用元组参数。
type Delegate1 = delegate of (int * int) -> int

//Delegate2 使用 curried 参数。
type Delegate2 = delegate of int * int -> int

let InvokeDelegate1 (dlg : Delegate1) (a : int) (b: int) =
   dlg.Invoke(a, b)
let InvokeDelegate2 (dlg : Delegate2) (a : int) (b: int) =
   dlg.Invoke(a, b)

//对于静态方法,使用类名、点运算符和静态方法的名称。

let del1 : Delegate1 = new Delegate1( Myclass.add )
let del2 : Delegate2 = new Delegate2( Myclass.sub )
let mc = Myclass()

//对于实例方法,使用实例值名称、点运算符、和实例方法名称。


let del3 : Delegate1 = new Delegate1( mc.Add )
let del4 : Delegate2 = new Delegate2( mc.Sub )

for (a, b) in [ (400, 200); (100, 45) ] do
   printfn "%d + %d=%d" a b (InvokeDelegate1 del1 a b)
   printfn "%d - %d=%d" a b (InvokeDelegate2 del2 a b)
   printfn "%d + %d=%d" a b (InvokeDelegate1 del3 a b)
   printfn "%d - %d=%d" a b (InvokeDelegate2 del4 a b)

编译并执行程序时,将产生以下输出-

400 + 200=600
400 - 200=200
400 + 200=600
400 - 200=200
100 + 45=145
100 - 45=55
100 + 45=145
100 - 45=55

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

零基础学Python -〔尹会生〕

如何做好一场技术演讲 -〔极客时间〕

深入拆解Tomcat & Jetty -〔李号双〕

HarmonyOS快速入门与实战 -〔QCon+案例研习社〕

零基础入门Spark -〔吴磊〕

计算机基础实战课 -〔彭东〕

Go进阶 · 分布式爬虫实战 -〔郑建勋〕

手把手带你写一个MiniSpring -〔郭屹〕

B端产品经理入门课 -〔董小圣〕

好记忆不如烂笔头。留下您的足迹吧 :)