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

在SML/NJ编译管理器中解决库冲突

如何解决《在SML/NJ编译管理器中解决库冲突》经验,为你挑选了1个好方法。

我正在使用SML/NJ 110.79,其中包括对Successor ML项目定义的新结构的支持.其中,Fn结构.

事实上,我已经在我的个人项目中使用了一个同名的结构,它在110.79之前工作正常.

使用110.79,对于此.cm文件:

group is
  $/basis.cm
  $SMACKAGE/sml-extras/v0.1.0/sources.sml.cm

但是我收到以下错误:

sources.cm:3.3-3.45错误:从$ SMLNJ-BASIS /(basis.cm)导入的结构Fn:basis-common.cm@155252(fn.sml)以及$ SMACKAGE/sml-extras/v0.1.0/(sources.sml.cm):SRC/fn.sml

有谁知道如何通过编译管理器解决此冲突.理想情况下,我的Fn结构就能够"扩展"的标准Fn由刚open-ing它,但使用SML-额外库项目,将不会看到标准的Fn结构,只有我的扩展版本.

这可能吗?我是否需要在sml-extras.cm项目中包装/重新导出整个basis.cm库?



1> Ionuț G. Sta..:

我设法通过使用我认为在CM手册中称为管理库的§2.9 来解决这个问题.

这恰恰意味着创建一个辅助.cm文件,它包装基础库并仅重新导出我们感兴趣的符号.

sources.cm

这是主项目文件.

library
  structure Main
is
  (* Let's say this library redefines the Fn and Ref structures    *)
  (* and the REF signature.                                        *)
  $SMACKAGE/sml-extras/v0.1.0/sources.sml.cm

  (* This excludes out Fn, Ref and REF from the Basis library, but *)
  (* imports anything else.                                        *)
  amended-basis.cm

  main.sml

amended-basis.cm

此文件导入$/basis.cm,然后再出口的所有它除了Fn,RefREF.

group
  library($/basis.cm) - (
    structure Fn
    structure Ref
    signature REF
  )
is
  $/basis.cm

main.sml

structure Main =
  struct
    open Fn (* sml-extras's Fn *)
  end

该解决方案基于CM手册中的集合计算,§4和附录A中的EBNF语法.

另一种解决方案是改变sml-extras以重新导出整个$/basis.cm,同时遮蔽冲突的符号.但是,出于模块化的考虑,我决定采用上面详述的解决方案.

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