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的基本原理和使用方法:

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

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  }

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

以上是Def Macros的標(biāo)準(zhǔn)實(shí)現(xiàn)模式?;驹硎沁@樣的:當(dāng)編譯器在編譯modu