米拉主页上写着
Mirah支持编译时元编程和宏的各种机制。在Mirah中,许多动态语言的“开放类”感觉是可能的。
但我找不到任何细节。还有人有进一步的信息吗?
发布于 2011-08-14 20:11:19
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宏引用块中,取消引用其中的语法树节点。
关于Mirah的工作方式,目前没有太多的资源,但是您可以查看Github上的示例代码。如果您有更多的问题,请随意发送电子邮件到邮寄名单。
https://stackoverflow.com/questions/7003129
复制相似问题