Ocaml 什么是PPX?
在许多使用ReasonML的项目中,经常使用缩写词PPX,但很少解释 什么是PPXOcaml 什么是PPX?,ocaml,reason,ppx,Ocaml,Reason,Ppx,在许多使用ReasonML的项目中,经常使用缩写词PPX,但很少解释 什么是PPX 为什么ReasonML需要它们?PPX来自Ocaml生态系统,ReasonML就是其中的一部分。基本上,PPX为您提供了一个扩展语言语法的API 退房 感谢您的支持,PPX(预处理器扩展)是一个抽象语法树(AST)重写器。本质上只是一个函数ast=>ast AST是语法的表示形式,是解析源代码后生成的树数据结构。由于PPX只能接受并返回此AST,因此它仅限于现有的OCaml/ReasonML语法。但是,它可以重新
为什么ReasonML需要它们?PPX来自Ocaml生态系统,ReasonML就是其中的一部分。基本上,PPX为您提供了一个扩展语言语法的API 退房 感谢您的支持,PPX(预处理器扩展)是一个抽象语法树(AST)重写器。本质上只是一个函数
ast=>ast
AST是语法的表示形式,是解析源代码后生成的树数据结构。由于PPX只能接受并返回此AST,因此它仅限于现有的OCaml/ReasonML语法。但是,它可以重新解释语法,并且可以在字符串中嵌入完全不同的语法,从而实现有限的封装形式的语法扩展
PPX也不允许重写整个AST。它们仅限于用户使用与现有节点关联的属性([@…
)或扩展节点([%…]
)标记的节点这些是独立的AST节点。PPX将注册一个或多个钩子,当编译器遇到这些钩子时,这些钩子将接收与其关联的AST,并且可以在编译器继续到its阶段之前转换这些AST片段
例子
可能是使用最广泛的PPX。它允许从类型签名“派生”某些功能。例如:
[@deriving show]
type t = {
foo: int,
bar: string,
};
将生成一个show
函数(以及其他一些函数),当给定类型为t
的值时,该函数将返回一个漂亮的字符串表示形式
和都是将CSS解析为某些OCaml/ReasonML数据结构的PPX,用于JS库中的各种CSS。它们将CSS语法嵌入带引号的字符串中,至少出于此目的,该字符串只是一个普通字符串,允许换行,并且不需要转义“
和\
[%style
{|
color: red;
margin: auto 0 10px 1em;
width: 70%;
background: url(http://example.com/test.jpg)
|}
];