Mirah主页说
Mirah支持编译时元编程和宏的各种机制。 Mirah可以提供很多关于动态语言的“开放式”感觉。
但我找不到任何具体细节。有没有人有进一步的信息?
答案 0 :(得分:4)
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
创建一段语法树,并使用在Mirah宏引用块中的`s将"something low level is going on: " + gimme_all_the_bytes_as_a_string
表达式放入其中,取消引用语法其中的树节点。
目前关于Mirah如何运作的资源并不多,但您可以查看Github上的example code。如果您有更多问题,请随时向mailing list发送电子邮件。