首页 > 解决方案 > Erlang编译期间的eval表达式

问题描述

是否有可能在 Erlang 中有某种constexpr等价物?

我有些表情

obj() -> func("some string")

其中func是一个纯函数(结果不依赖于参数以外的任何内容),我希望它在编译期间执行。我怎样才能实现它?

编辑我可以接受任何合理的黑客攻击,只要它们允许func成为休闲功能

标签: compilationerlangmetaprogrammingconstexpr

解决方案


您可以使用ct_expandUlf Wigerparse_trans存储库的一部分。要使用它,请指定编译器应用ct_expand作解析转换:

-compile({parse_transform, ct_expand}).

然后,对于您要在编译时评估的每个表达式,将其包装在ct_expand:term/1

obj() -> ct_expand:term(func("some string")).

另请参阅示例模块


推荐阅读