Scala Macros對scala函數(shù)庫編程人員來說是一項不可或缺的編程工具,可以通過它來解決一些用普通編程或者類層次編程(type level programming)都無法解決的問題,這是因為Scala Macros可以直接對程序進行修改。Scala Macros的工作原理是在程序編譯時按照編程人員的意旨對一段程序進行修改產(chǎn)生出一段新的程序。具體過程是:當編譯器在對程序進行類型驗證(typecheck)時如果發(fā)現(xiàn)Macro標記就會將這個Macro的功能實現(xiàn)程序(implementation):一個語法樹(AST, Abstract Syntax Tree)結(jié)構(gòu)拉過來在Macro的位置進行替代,然后從這個AST開始繼續(xù)進行類型驗證過程。
下面我們先用個簡單的例子來示范分析一下Def Macros的基本原理和使用方法:
1 object modules {2 greeting("john")3 }4 5 object mmacros {6 def greeting(person: String): Unit = macro greetingMacro7 def greetingMacro(c: Context)(person: c.Expr[String]): c.Expr[Unit] = ...8 }
以上是Def Macros的標準實現(xiàn)模式。基本原理是這樣的:當編譯器在編譯modu