【发布时间】:2015-05-01 13:41:00
【问题描述】:
我最近想知道标准 ML 结构是否可以实现多个签名,类似于一个类如何在 Java 中实现多个接口。快速搜索发现this web page Bob Harper 说这确实是可能的(强调我的):
[...] ML 中的签名和结构之间的关系是 多对多,而在某些语言(例如 Modula-2)中 关系是一对一或多对一。这意味着在 ML 中 签名可以作为许多不同结构的接口, 并且一个结构可以实现许多不同的签名。
但是,我找不到语法,并且粗略查看了修改后定义中的模块语法似乎不支持上述引用。
我的问题是:
- 有可能吗?
- 如果是,语法是什么?
编辑:经过一番玩弄之后,我认为 Bob Harper 实际上指的是签名匹配。这个 sn-p 是一个小例子,其中找到一个结构作为两个不同签名的匹配项:
signature S1 = sig val s1 : int end
signature S2 = sig val s2 : string end
functor F1 (A : S1) = struct val f1 = A.s1 end
functor F2 (B : S2) = struct val f2 = B.s2 end
structure C =
struct
val s1 = 1
val s2 = "1"
end
structure F1C = F1 (C)
structure F2C = F2 (C)
在这一点上,我假设,是的,一个结构可以被视为实现多个签名,但是没有办法在结构声明中使用签名规范来强制执行,例如:
structure C : S1 and S2 = ...
【问题讨论】: