【发布时间】:2014-08-22 09:17:39
【问题描述】:
我正在开发一个相对较大的 SML 代码库。它最初是用 MLton 编译的,但我现在在 SML/NJ 下使用它。我需要使用RedBlackMapFn,它在smlnj-lib.cm 中定义。但是,我收到一个错误:
elaborate/elaborate-bomenv.fun:9.20-9.27 Error: unbound signature: ORD_KEY
elaborate/elaborate-bomenv.fun:14.21-14.40 Error: unbound functor: RedBlackMapFn
elaborate/elaborate-bomenv.fun:32.20-32.27 Error: unbound signature: ORD_KEY
elaborate/elaborate-bomenv.fun:37.21-37.40 Error: unbound functor: RedBlackMapFn
所以我假设smlnj-lib.cm 没有被CM 拉动。为了解决这个问题,我将$/smlnj-lib.cm 添加到我正在工作的目录中的sources.cm 文件中。这会导致一个单独的问题:
elaborate/sources.cm:25.1-25.18 Error: structure Random imported from $SMLNJ-LIB/Util/smlnj-lib.cm@243997(random.sml) and also from ./(sources.cm):lib/(sources.cm):basic/(sources.cm):random.sml
elaborate/sources.cm:25.1-25.18 Error: structure Queue imported from $SMLNJ-LIB/Util/smlnj-lib.cm@436143(queue.sml) and also from ./(sources.cm):lib/(sources.cm):basic/(sources.cm):two-list-queue.sml
没有骰子。我尝试删除来自./(sources.cm):lib/(sources.cm):basic/(sources.cm):random.sml 的Random 结构,但它似乎不等同于标准库中定义的结构,所以我不能只用一个替换另一个。
我想使用类似 Python 的 import ... from ... as ...
为来自标准库的Random 赋予新名称的机制,但CM 的documentation 没有提供任何关于我将如何去做的提示。
如何解决跨多个 SML 文件的模块命名冲突?
【问题讨论】:
-
@newacct 不正确,看起来 CM 不会拉入
$/smlnj-lib.cm如果它会导致命名冲突(就像对我来说一样)。我可以在我编写的其他 SML 代码中找到RedBlackMapFn,但在这个项目中没有。 -
可能是一个将
RedBlackMapFn包装在单独编译的模块中的函数,该函数实现了隐藏random的第二个声明的签名? 免责声明:这是评论而非答案是有原因的。 -
@benrudgers 我最终将需要
RedBlackMapFn的文件拆分为一个单独的.cm文件,并且有效。不过有点丑。很高兴知道是否有更好的方法。 -
很高兴你能成功。您是否考虑过将其发布为答案?
-
@benrudgers 我希望其他人有更好的主意,但当然,我现在就发布。