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,这很难,应该避免。
结论:不,你不能。
我有一个标签列表:
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,这很难,应该避免。
结论:不,你不能。