【发布时间】:2020-06-28 02:46:30
【问题描述】:
假设我有一些类型
type A = { ... }
type B = { ... }
type AB = A of A | B of B
type Ainfo = {
a: A
...
}
type Binfo = {
b: B
...
}
type ABinfo = Ainfo of Ainfo | Binfo of Binfo
我需要一个集合来存储这些类型的附加信息
类似Dictionary<AB, ABinfo>
这个字典的问题是它允许将 A 的键与 Binfo 的值相关联。
有没有一种好的方法来构造代码,让 A 总是用 Ainfo 扩展而 B 总是用 Binfo 扩展?在 OOP 中,我会从 A 继承 Ainfo,从 B 继承 Binfo,但不确定如何在 F# 中以最佳方式做到这一点
【问题讨论】:
-
只列出
ABinfo怎么样?Ainfo和Binfo已经分别具有A和B的值,因此您不需要以字典键的形式复制它们。这种重复就是不一致的来源。 -
或两个字典,问题不是真正的 OOP 与 FP,字典允许 1 类型的键映射到 1 类型的值。
-
@FyodorSoikin 我想通过 AB 快速找到 ABinfo,列表我必须迭代。
-
好的,在这种情况下,您能否描述一下您将如何通过 OOP 和继承来避免这个问题?从我的立场来看,只要您坚持使用字典,您就会遇到完全相同的问题。
标签: f#