当前位置:  开发笔记 > 编程语言 > 正文

使用F#在类/接口中动态定义多个成员

如何解决《使用F#在类/接口中动态定义多个成员》经验,为你挑选了1个好方法。

我正在使用F#进行小型程序只是为了进行个人训练并得到一些时刻,这是我无法解决的.

我正在描述一些界面:

type I?alculations =
    abstract member Add : int * int -> int
    abstract member Subtract : int * int -> int
    abstract member Multiply : int * int -> int
    abstract member Divide : int * int -> int

如您所见,除名称外的成员签名是相同的.

我可以使用F#进行下一步(现在将是伪代码):

let names = [ "Add", "Subtract", "Multiply", "Divide" ];
let ICalculations = new interface;

foreach ( name in names ) {
    ICalculations[ name ] : int * int -> int
}

目的不是为每个成员重复签名 int * int -> int

可能吗?



1> Petr..:

接口声明后,您无法定义接口方法类型.但是你可以定义例如Dictionary,包含你的类型的函数:

open System.Collections.Generic    
type Ops = Add | Subtract | Multiply | Divide
let pseudoInterface = Dictionary int>()

// Then somewhere in your program you could define this "methods"
pseudoInterface.[Add] <- fun (i, j) -> i + j
pseudoInterface.[Subtract] <- fun (i, j) -> i - j // etc...

或者,您可以为函数类型定义类型别名,以简化:

type Op = int * int -> int
type I?alculations =
    abstract member Add : Op    
    abstract member Subtract : Op
    abstract member Multiply : Op
    abstract member Divide : Op

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有