Mirah提供哪些元编程功能?

时间:2011-08-09 21:18:23

标签: mirah

Mirah主页说

  

Mirah支持编译时元编程和宏的各种机制。 Mirah可以提供很多关于动态语言的“开放式”感觉。

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

1 个答案:

答案 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发送电子邮件。