0

我有一个标签列表:

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

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

/* 不要介意语法,这是 Facebook 的原因(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|];

}

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

4

1 回答 1

4

假设您想要做的是构建一个具有一段string list时间程序执行名称的模块,

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

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

结论:不,你不能。

于 2016-06-13T02:26:54.650 回答