我知道分号在 REPL 中用作终止符。但我对何时在源文件中使用它们感到困惑。
例如,之后不需要val x = 1
。但如果我之后省略它use "foo.sml"
,编译器会抱怨它。
那么,分号的使用规则是什么呢?
分号用于 SML 中的许多语法实体。它们通常用于创建表达式或声明等序列。这是 SML 语法的链接:
http://www.mpi-sws.org/~rossberg/sml.html http://www.mpi-sws.org/~rossberg/sml.html
就您而言,您对声明的分号感兴趣(dec班级)。请注意,创建 dec 序列的分号是可选的。在编写 SML 模块时,您实际上永远不会需要它,而且很少会看到它们。例如
structure S = struct
val x = 5
fun f x = x
val z = x + x
end
not
structure S = struct
val x = 5;
fun f x = x;
val z = x + x
end
在源文件中,通常使用分号的唯一地方是分隔具有副作用的表达式。例如,
val x = ref 5
val _ = (x := !x + 1; x := !x+ 2)
但这种用法很少见。
smlnj repl 仅在看到分号时才评估声明,因此只要您想查看或使用该值,就应该使用分号。我觉得use "foo.sml";
case 令人困惑,因为它不是声明;这是一个表达。我想 repl 会转换这样的表达式use "foo.sml"
into val _ = use "foo.sml"
。因此它需要分号来告诉 repl 真正运行它,如上所述。顺便说一句,没有什么特别的use
。它只是类型的函数string -> unit
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)