我有:
module type A = sig end
此代码有效:
let f x =
let module X = (val x : A) in
object end
和此:
let f (module X : A) =
object end
但这是无效的:
class c x =
let module X = (val x : A) in
(* ^^^ Error: Syntax error *)
object end
和此:
class c (module X : A) =
(* ^^^^^^^^^^^^^ Error: Modules are not allowed in this pattern. *)
object end
我无法理解:为什么? 如何在类上下文中将第一类模块解包到模块中? 我的编译器版本= 4.01.0
谢谢
答案 0 :(得分:6)
不允许使用任何形式的类定义的本地模块:
class c =
let module L = List in
object end;;
Characters 18-24:
let module L = List in
^^^^^^
Error: Syntax error
我不确定具体原因,但我认为它on very good authority很难实现。
但是,可以接受类的第一类模块参数,并在实际使用它的方法和值中解压缩它。例如:
class c d = object
method foo =
let module D = (val d : A) in
D.b + 5
end