繁体   English   中英

erlang编译选项的用途是什么:“-compile({parse_transform,ms_transform})”。

[英]what is the use of erlang compile options: “-compile({parse_transform, ms_transform})”.?

作为标题,有人可以解释使用ms_transform解析parse_transform吗? 有和没有它有什么区别?

-compile({parse_transform, ms_transform}). 语法调用解析转换

解析转换是一个模块,在解析文件或输入后,编译器将调用该模块。 使用整个模块的完整抽象语法调用该模块,并且必须为整个模块返回新的抽象。 只要结果是合法的erlang语法,就可以执行解析转换。 它就像一个超级宏工具,它不仅可用于单个函数,而且可在整个模块上运行。 然后编译生成的模块。 您可以有许多解析转换。

解析转换通常用于进行编译时评估和代码转换。 @P_A提到的ets:fun2ms调用是一个典型的例子,因为它很有趣,并且在编译时将其转换为匹配规范 ,请参见Matchspecsets:fun2ms 但是解析转换使您可以做更多的事情,例如添加和删除函数。 这样的一个例子是解析转换,它为记录中的所有字段生成访问函数。

它是一个非常强大的工具,但不幸的是很容易出错,因此会造成混乱。 但是,有些第三方支持工具可能会很有帮助。

ms_transform模块实现parse_transform,它将有趣的语法转换为匹配规范。 例如ets:fun2ms fun使用它。 你也可以用

-include_lib("stdlib/include/ms_transform.hrl").

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM