【问题标题】:How to compile multiple SML files?如何编译多个 SML 文件?
【发布时间】:2016-04-30 06:00:18
【问题描述】:

它如何在 Standard-ML 中编译多个文件?我有 2 个文件。

file1.sml:

(* file1.sml *)
datatype fruit = Orange | Apple | None

还有file2.sml:

(* file2.sml *)
datatype composite = Null | Some of fruit

所以你可以看到file2.sml 正在使用来自file1.sml 的东西。我怎样才能使这个东西编译?

我正在使用mosmlc.exe,编译时mosmlc file2.sml(至于this question):

(* file2.sml *)
use "file1.sml";
datatype composite = Null | Some of fruit

我明白了:

! use "file1.sml";
! ^^^
! Syntax error.

那么,如何处理多个文件呢?

【问题讨论】:

  • 包含编译器投诉很有用。此外,不清楚您使用的是mosml 可执行文件还是mosmlc 可执行文件。
  • 刚刚使用这些信息进行了编辑!

标签: sml mosml


【解决方案1】:

您可以在Moscow ML Owner’s Manual 中阅读更多内容,但在您的特定情况下,以下命令应该可以工作,甚至不必在源代码中使用use

mosmlc -toplevel file1.sml file2.sml

使用结构模式

当您想将代码组织成结构时,可以使用mosmlc-structure 标志。例如,给定以下文件:

你好.sml

structure Hello =
  struct
    val hello = "Hello"
  end

世界.sml

structure World =
  struct
    structure H = Hello

    val world = H.hello ^ ", World!"
  end

main.sml

fun main () =
  print (World.world ^ "\n")

val _ = main ()

您现在可以获得一个名为main 的可执行文件,如下所示:

mosmlc -structure Hello.sml World.sml -toplevel main.sml -o main

然后运行它:

$ ./main
Hello, World!

结构模式要求你的文件名和包含的结构一致,就像在Java中类和文件必须有相同的名字一样。您还可以使用包含签名的.sig 文件。

【讨论】:

  • 我明白了...但是您能否解释一下如何将我的代码封装在这些文件中并导入到其他文件中?我看到了定义结构然后在其他文件中打开的代码......在这种情况下它是如何工作的?
  • @Andry 答案已更新。如果你的意思是别的,请告诉我。
  • 酷。我在一些资料中看到他们使用open <structure-name>。什么时候需要?
  • @Andry open Structure 类似于 C# 中的 using Namespace。它使该结构的所有成员在当前范围内可见。我建议使用structure Abbr = Abbreviation 方法,这样您就可以准确地知道什么来自哪里。
  • 谢谢。你让我的白天/黑夜。祝你早日/晚安:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 2016-12-22
  • 2011-12-12
  • 2020-06-02
  • 2011-08-23
  • 1970-01-01
相关资源
最近更新 更多