compilation - Erlang编译期间的eval表达式
问题描述
是否有可能在 Erlang 中有某种constexpr
等价物?
我有些表情
obj() -> func("some string")
其中func
是一个纯函数(结果不依赖于参数以外的任何内容),我希望它在编译期间执行。我怎样才能实现它?
编辑我可以接受任何合理的黑客攻击,只要它们允许func
成为休闲功能
解决方案
您可以使用ct_expand
Ulf Wigerparse_trans
存储库的一部分。要使用它,请指定编译器应用ct_expand
作解析转换:
-compile({parse_transform, ct_expand}).
然后,对于您要在编译时评估的每个表达式,将其包装在ct_expand:term/1
:
obj() -> ct_expand:term(func("some string")).
另请参阅示例模块。
推荐阅读
- python - get_object_or_404 can't find object with primary key
- javascript - Angular中的窗口聚焦过程
- excel - 当 Excel 中的数据源更新时,电源查询运行后硬编码的值错位
- html - 隐藏在 Angular 中无法使用 Array
- r - 在R数据帧中减去对角线?
- smartgit - 如何让 SmartGit 一次只显示一个存储库?
- c++ - 如何在 C++ 中返回没有模板的泛型类型?
- javascript - 利用 localStorage 的简单无线电形式在移动设备上不起作用
- angular - 如何在 Angular 6(使用 rxjs 6)中订阅多个 HTTP 请求并确保发出所有请求,即使其中一个会引发错误
- react-native - 如何在 TabNavigator 的特定屏幕上隐藏标题