[英]OCaml dynamic function name
我有一个标签列表:
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|];
}
标签名称应成为模块中的功能...这可能吗?
假设您要执行的是在执行程序时使用string list
名称构建模块,
简短答案:不,OCaml是一种静态类型的语言,您无法在程序执行时建立新的变量名。
更长的答案:您可以使用元编程:使用所需名称构建源代码,然后对其进行编译并动态链接已编译的模块。 但这根本不是使用OCaml的常规方法。 另外,查看环境,使用OCaml(或Reason)输出Js代码,您可能需要将OCaml(或Reason)编译器编译为Js,这很困难,应避免。
结论:不,您不能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.