【问题标题】:How to unpack first-class module to module for object with class declaration?如何将一流的模块解压缩到具有类声明的对象的模块?
【发布时间】:2014-07-31 13:26:03
【问题描述】:

我有:

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

谢谢

【问题讨论】:

    标签: class object ocaml unpack


    【解决方案1】:

    不允许使用任何形式的类定义本地模块:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 2021-07-25
      • 2019-12-28
      • 2021-01-19
      • 1970-01-01
      相关资源
      最近更新 更多