Modules模块NamespaceManagement命名空间管理
大部分程序语言都有组织大型程序的方式。如将代码分开放到不同文件中,对外隐藏内部代码。
SML定义module
structure MyModule = struct bindings end
(* Programming Languages *)
(* Section 4: Namespace Management *)
structure MyMathLib =
struct
fun fact x =
if x = 0
then 1
else x * fact (x -1)
val half_pi = Math.pi / 2.0
fun doubler y = y + y
end
(* 在模块外调用模块内的绑定,需要带上模块名 *)
val pi = MyMathLib.half_pi + MyMathLib.half_pi
val twenty_eight = MyMathLib.doubler 14
有一种方法可以直接访问Module的绑定
open ModuleName
使用该行代码后,后面的代码访问Module内的内容,可以不需要带上模块名。不推荐在实际运行的代码中这么做。
更好的方法是生成一个local绑定,如 val map = List.map.
Signatures, 在SML里Signature是structure模块的类型,有点类似于定义接口,具有隐藏代码的作用。
signature SIGNAME =
sig types-for-binding end
structure MyModule :> SIGNAME =
struct bindings end