gpt4 book ai didi

dynamic - 使用 F# 在类/接口(interface)中动态定义多个成员

转载 作者:行者123 更新时间:2023-12-02 15:07:16 24 4
gpt4 key购买 nike

我正在使用 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

可能吗?

最佳答案

不能在接口(interface)声明之后定义接口(interface)方法类型。但是您可以定义例如字典,其中包含您类型的函数:

open System.Collections.Generic    
type Ops = Add | Subtract | Multiply | Divide
let pseudoInterface = Dictionary<Ops, int * int -> 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

关于dynamic - 使用 F# 在类/接口(interface)中动态定义多个成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34372151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com