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. Lithium通過CakePHP提供哪些新功能和改進?
- 4. Google Apps腳本中提供了哪些JavaScript功能?
- 5. 您的IDE的Struts2開發插件提供了哪些功能?
- 6. Perl提供的其他語言不支持哪些編譯時功能?
- 7. 哪些.NET編程語言擁有CodeDom提供程序?
- 8. 如何用jQuery提供某些功能?
- 9. AlexNet圖層提取了哪些功能?
- 10. wpf哪些功能?
- 11. 該程序鏈接到哪個庫提供給定的功能?
- 12. 爲SharePoint 2007提供ASP.Net 3.5功能有哪些可支持的選項?
- 13. JuMPArrays有哪些功能?
- 14. sharepoint中有哪些功能?
- 15. 「android.intent.category.MONKEY」有哪些功能?
- 16. 哪些功能更有效?
- 17. 意圖有哪些功能?
- 18. 提供打印功能4
- 19. 提供emacs功能; defadvice
- 20. Chrome中提供Firebug功能?
- 21. OpenID提供商向消費者提供哪些個人信息?
- 22. module.config中提供了哪些提供者/服務?
- 23. python/django提供哪些打包選項
- 24. SQLCipher提供哪些密碼和模式?
- 25. BlueSnap提供哪些類型的集成?
- 26. StarTeam提供哪些搜索選項?
- 27. BASH提供了哪些ncurses框架?
- 28. 在線提供哪些組件市場?
- 29. JAXB2提供了哪些Maven2插件?
- 30. C++ 11提供哪些Mersenne Twister?
偉大的答案,謝謝!這是mirah對猴子補丁的做法嗎? –
不是真的,有一種方法可以添加擴展方法,'times'就是一個很好的例子,但是據我所知,重寫方法的方法並不存在。這並不總是如此。 – BaroqueBobcat