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 类型变量的任何方法。

用语法-

  • 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

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

技术教程推荐

Linux内核技术实战课 -〔邵亚方〕

大厂晋升指南 -〔李运华〕

实用密码学 -〔范学雷〕

etcd实战课 -〔唐聪〕

玩转Vue 3全家桶 -〔大圣〕

深入剖析Java新特性 -〔范学雷〕

手把手教你落地DDD -〔钟敬〕

结构思考力 · 透过结构看表达 -〔李忠秋〕

徐昊 · AI 时代的软件工程 -〔徐昊〕

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