OCaml 动态函数名

OCaml dynamic function name

我有一个标签列表:

let tags = ["div", "h1", "p"]

我可以生成一个包含以这些标签作为名称的函数的模块吗?

/* 不要介意语法,这是 Facebook 的 Reason(ocaml 的新接口)*/

let module DOM = {
   let div props children => Js.Unsafe.fun_call
        (Js.Unsafe.get dom (Js.string "div")) [|Js.Unsafe.inject props, Js.Unsafe.inject children|];
    let h1 props children => Js.Unsafe.fun_call
        (Js.Unsafe.get dom (Js.string "h1")) [|Js.Unsafe.inject props, Js.Unsafe.inject children|];
let p props children => Js.Unsafe.fun_call
        (Js.Unsafe.get dom (Js.string "p")) [|Js.Unsafe.inject props, Js.Unsafe.inject children|];

}

标签名应该成为模块中的函数... 这可能吗?

假设您想要做的是在程序执行时构建一个名称来自 string list 的模块,

简短回答:不,OCaml 是一种静态类型语言,您不能在程序执行时构建新的变量名。

更长的答案:您可以使用元编程:使用您想要的名称构建源代码,然后编译它并动态 link 编译模块。但这根本不是使用 OCaml 的常规方式。另外,看你的环境,OCaml(或Reason)输出Js代码,你可能需要一个OCaml(或Reason)编译器编译成Js,这很难,应该避免。

结论:不,你不能。