Module 定义一个模块并在一个文件中调用其函数
我在文件Module 定义一个模块并在一个文件中调用其函数,module,ocaml,Module,Ocaml,我在文件mod.ml中定义了一个模块,如下所示: module Area = struct ... let test : unit = Print.printf "haha" ... end;; Print.printf "hehe";; Area.test 似乎没有在end之后,我无法通过ocamlc编译代码。但是对我来说,有在Ocaml文件中,我必须保留它们吗 通过ocamlc生成mod后,我启动mod,它将打印hahahehe。似乎haha是由let test:u
mod.ml
中定义了一个模块,如下所示:
module Area = struct
...
let test : unit =
Print.printf "haha"
...
end;;
Print.printf "hehe";;
Area.test
似乎没有
在end
之后,我无法通过ocamlc
编译代码。但是对我来说,有
在Ocaml文件中,我必须保留它们吗
通过
ocamlc
生成mod
后,我启动mod
,它将打印hahahehe
。似乎haha
是由let test:unit…
的定义打印出来的,而不是它的调用区域。test
。因此,我所做的是哈哈哈
或哈哈哈
。有人能解释为什么它不是我所期望的吗?我从不使用在我的源文件中,我认为它是顶级界面的一部分。对于您的代码,我可能会编写:
module Area = struct
let test : unit -> unit =
fun () -> Printf.printf "haha"
end
let () =
Printf.printf "hehe";
Area.test ()
值得一提的是,Area.test
正如您定义的那样,它不是一个函数,它只是一个单位值,在计算过程中会产生副作用。在我这里的代码中,我将其更改为类型为unit->unit
的函数,我从不使用在我的源文件中,我认为它是顶级界面的一部分。对于您的代码,我可能会编写:
module Area = struct
let test : unit -> unit =
fun () -> Printf.printf "haha"
end
let () =
Printf.printf "hehe";
Area.test ()
值得一提的是,Area.test
正如您定义的那样,它不是一个函数,它只是一个单位值,在计算过程中会产生副作用。在这里的代码中,我将其更改为类型为unit->unit
的函数当ocamlc
加载模块时,它会按照定义的顺序计算所有“顶级”定义。在您的例子中,有三个“顶级”定义
- 第一个是值
unit
(类型unit
的唯一值),它绑定到名称“test”。这个值是在副作用后生成的:显示“哈哈”(这里模块区域用作名称空间,它不会延迟计算)
- 第二个是值
单位
,但没有名称绑定;该值也会产生副作用:显示“呵呵”
- 最后一个是与名称“test”关联的值,即
单元
。但是,这一次没有副作用,因为已经生成了与名称“test”关联的值unit
如果希望每次调用test时都有副作用,则需要使用以下函数:
let test () = Print.printf "haha"
对于代码>问题的一部分。解析器需要这些信息才能知道表达式何时结束。还有其他方法可以帮助解析器,例如:
let () = Print.printf "hehe"
或者简单地说:
let _ = Area.test
最新版本较短,因为您不必指示类型信息,但更容易出错,因为编译器在部分应用程序的情况下不会使您感到温暖。当ocamlc
加载模块时,它会按照定义的顺序计算所有“顶级”定义。在您的例子中,有三个“顶级”定义
- 第一个是值
unit
(类型unit
的唯一值),它绑定到名称“test”。这个值是在副作用后生成的:显示“哈哈”(这里模块区域用作名称空间,它不会延迟计算)
- 第二个是值
单位
,但没有名称绑定;该值也会产生副作用:显示“呵呵”
- 最后一个是与名称“test”关联的值,即
单元
。但是,这一次没有副作用,因为已经生成了与名称“test”关联的值unit
如果希望每次调用test时都有副作用,则需要使用以下函数:
let test () = Print.printf "haha"
对于代码>问题的一部分。解析器需要这些信息才能知道表达式何时结束。还有其他方法可以帮助解析器,例如:
let () = Print.printf "hehe"
或者简单地说:
let _ = Area.test
最新版本更短,因为您不必指示类型信息,但更容易出错,因为编译器在部分应用程序的情况下不会使您感到温暖