2

Mirah主页说

Mirah 支持编译时元编程和宏的各种机制。在 Mirah 中,动态语言的大部分“公开课”感觉都是可能的。

但我找不到任何细节。有没有人有进一步的信息?

4

1 回答 1

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"something low level is going on: " + gimme_all_the_bytes_as_a_string使用 Mirah 宏引用块中的 ``s 将表达式放入其中,取消引用其中的语法树节点。

目前没有太多关于 Mirah 工作原理的资源,但您可以查看 Github 上的示例代码。如果您有更多问题,请随时向邮件列表发送电子邮件。

于 2011-08-14T20:11:19.520 回答