2011-08-09 48 views
2

的米拉主頁指出Mirah提供哪些元編程功能?

米拉支持編譯時元編程和宏的各種機制。在Mirah中,動態語言的大部分「公開課」感覺都是可能的。

但我無法找到任何細節。有沒有人有進一步的信息?

回答

4

米拉支持編譯時間宏。通過它們,您可以定義在編譯時運行的函數,以修改語法樹。這使您可以將您在Java中看到的一些常見模式簡化爲更類似於Ruby中的模式。

例如,times被實現爲宏 - 儘管它目前Ruby編寫的,而不是米拉。

您可以使用它像這樣

5.times do |i| 
    puts i 
end 

打印出號0-4

在Java中它會看起來像

for(int i=0;i < 5; i++) { 
    System.out.println(i); 
} 

當然你也可以定義自己的宏使用宏macro def。例如,假設我想在構造調試字符串之前使用通用的logger4j模式來檢查是否啓用了debug。用宏,我可以做的檢查隱含的做這樣的事情:

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並使用``S的在米拉宏報價塊,解除引用在其中所述語法樹節點丟棄"something low level is going on: " + gimme_all_the_bytes_as_a_string表達進去。

當前有不是米拉是如何工作的資源太多,但你可以看看example code Github上。如果您有更多問題,請隨時發送電子郵件至mailing list

+0

偉大的答案,謝謝!這是mirah對猴子補丁的做法嗎? –

+0

不是真的,有一種方法可以添加擴展方法,'times'就是一個很好的例子,但是據我所知,重寫方法的方法並不存在。這並不總是如此。 – BaroqueBobcat