给定一个语法扩展,看起来像这样OCaml PPXes是否可以返回要由其他PPX扩展解析的扩展?
let a = [%jsx div className="hello"]
我已经得到了它转换为(像)
let a = ReactJS.create_element "div" ~props:(object%js val className = "hello" end)
我需要的OCaml随后转变%JS语法扩展一个PPX,它由js_of_ocaml提供。
但是,从外观上看,PPX扩展的东西在源代码上做了一个遍历,并且不会递归应用它。
它可以这样做吗?或者我需要尝试导入js_of_ocaml PPX并在我自己的内部运行它?或者是在我自己的代码中简单地删除中间人并产生相同转换的最佳方法?
编辑 - 更多信息:
因此,它不会出现被应用PPXes的顺序是这里的问题。我得到如下:
+ ocamlfind ocamlc -c -package reactjs,reactjs_ppx,react,js_of_ocaml,js_of_ocaml.ppx -o tutorial.cmo tutorial.ml File "tutorial.ml", line 3, characters 14-99: Uninterpreted extension 'js'.
我有一种感觉,我虽然(再次)产生错误的AST。 用于生成js%object
的代码如下所示:
Exp.extension ({txt="js"; loc=loc}, PStr [ Str.eval ( Exp.object_ ( Cstr.mk (Pat.any()) fields ) ) ] )
完成 - https:// github。com/ocsigen/js_of_ocaml/issues/460 –
所以事实证明,我需要的东西已经导出 - 我只需要把它放到我的项目中,现在一切都很开心! –