Scala Macros對scala函數(shù)庫編程人員來說是一項(xiàng)不可或缺的編程工具,可以通過它來解決一些用普通編程或者類層次編程(type level programming)都無法解決的問題,這是因?yàn)镾cala Macros可以直接對程序進(jìn)行修改。Scala Macros的工作原理是在程序編譯時按照編程人員的意旨對一段程序進(jìn)行修改產(chǎn)生出一段新的程序。具體過程是:當(dāng)編譯器在對程序進(jìn)行類型驗(yàn)證(typecheck)時如果發(fā)現(xiàn)Macro標(biāo)記就會將這個Macro的功能實(shí)現(xiàn)程序(implementation):一個語法樹(AST, Abstract Syntax Tree)結(jié)構(gòu)拉過來在Macro的位置進(jìn)行替代,然后從這個AST開始繼續(xù)進(jìn)行類型驗(yàn)證過程。
下面我們先用個簡單的例子來示范分析一下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的標(biāo)準(zhǔn)實(shí)現(xiàn)模式?;驹硎沁@樣的:當(dāng)編譯器在編譯modu