Mirah主页说
Mirah 支持编译时元编程和宏的各种机制。在 Mirah 中,动态语言的大部分“公开课”感觉都是可能的。
但我找不到任何细节。有没有人有进一步的信息?
Mirah 支持编译时宏。使用它们,您可以定义在编译时运行的修改语法树的函数。这允许您将在 Java 中看到的一些常见模式简化为更类似于 Ruby 中的模式。
例如,times
作为宏实现——尽管它目前是用 Ruby 编写的,而不是 Mirah。
你可以像这样使用它
5.times do |i|
puts i
end
打印出数字 0-4
在Java中它看起来像
for(int i=0;i < 5; i++) {
System.out.println(i);
}
您当然可以使用宏定义自己的macro def
宏。例如,假设我想在构造调试字符串之前使用常见的 logger4j 模式来检查是否启用了调试。使用宏,我可以使检查隐式执行如下操作:
macro def debug debug_input
quote do
if logger.debugEnabled
logger.debug `debug_input`
end
end
end
我可以这样称呼
debug "something low level is going on: " + gimme_all_the_bytes_as_a_string
发生了什么是我正在创建一个语法树,quote do ... end
并"something low level is going on: " + gimme_all_the_bytes_as_a_string
使用 Mirah 宏引用块中的 ``s 将表达式放入其中,取消引用其中的语法树节点。
目前没有太多关于 Mirah 工作原理的资源,但您可以查看 Github 上的示例代码。如果您有更多问题,请随时向邮件列表发送电子邮件。