2
A
回答
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。
相關問題
- 1. XText不提供哪些ANTLR的功能?
- 2. RX.Component類通過React.Component提供了哪些功能?
- 3. 您的IDE的Struts2開發插件提供了哪些功能?
- 4. Google Apps腳本中提供了哪些JavaScript功能?
- 5. Lithium通過CakePHP提供哪些新功能和改進?
- 6. Perl提供的其他語言不支持哪些編譯時功能?
- 7. 如何用jQuery提供某些功能?
- 8. 哪些.NET編程語言擁有CodeDom提供程序?
- 9. AlexNet圖層提取了哪些功能?
- 10. wpf哪些功能?
- 11. 該程序鏈接到哪個庫提供給定的功能?
- 12. 爲SharePoint 2007提供ASP.Net 3.5功能有哪些可支持的選項?
- 13. sharepoint中有哪些功能?
- 14. 哪些功能更有效?
- 15. 意圖有哪些功能?
- 16. Chrome中提供Firebug功能?
- 17. OpenID提供商向消費者提供哪些個人信息?
- 18. module.config中提供了哪些提供者/服務?
- 19. python/django提供哪些打包選項
- 20. StarTeam提供哪些搜索選項?
- 21. BASH提供了哪些ncurses框架?
- 22. SQLCipher提供哪些密碼和模式?
- 23. Rails 3提供哪些認證選項?
- 24. Google Play提供哪些受衆特徵?
- 25. 在線提供哪些組件市場?
- 26. 哪些DBMS提供索引組織表?
- 27. JAXB2提供了哪些Maven2插件?
- 28. WIF提供哪些安全優勢?
- 29. BlueSnap提供哪些類型的集成?
- 30. 哪些是免費提供的最佳地理編碼API?
偉大的答案,謝謝!這是mirah對猴子補丁的做法嗎? –
不是真的,有一種方法可以添加擴展方法,'times'就是一個很好的例子,但是據我所知,重寫方法的方法並不存在。這並不總是如此。 – BaroqueBobcat