我可以从运行时选择的OCaml类继承吗?

int*_*nt3 5 ocaml

所以现在我有两个相同类类型的类,例如

class foo : foo_type = object ... end

class bar : foo_type = object ... end
Run Code Online (Sandbox Code Playgroud)

我希望有一个继承自foobar在运行时的第三个类.例如(伪语法)

class baz (some_parent_class : foo_type) = object
    inherit some_parent_class
    ...
end
Run Code Online (Sandbox Code Playgroud)

这在OCaml中是否可行?

使用案例:我正在使用对象构建AST访问者,我希望能够根据一组运行时标准组合这些访问者,这样他们只能对AST进行一次组合遍历.

编辑:我想我找到了一种使用一流模块创建所需类的方法:

class type visitor_type = object end

module type VMod = sig
  class visitor : visitor_type
end

let mk_visitor m =
  let module M = (val m : VMod) in
  (module struct
    class visitor = object
      inherit M.visitor
    end
  end : VMod)
Run Code Online (Sandbox Code Playgroud)

然而,为了使它成为"一流",必须在模块中包装一个类似乎有点迂回.如果有更简单的方法请告诉我.

ivg*_*ivg 3

与 Jeffrey 所说的并不相反,但您可以使用一流的模块来实现这一点。另外,我不确定您是否真的需要在运行时创建类,也许创建对象就足够了。如果你想要得到的是不同的行为,那么这就足够了。