我已經定義了下面的宏從當前位置開始的文件,線和對象/類: http://pastebin.com/UsNLemnK斯卡拉宏快捷
使用SBT,我已經定義了兩個項目,以先編譯宏,然後實際的項目使用這些宏。
這些宏的目的是要在一個日誌方法中使用:
def log(msg: Any, srcFile: String = "", srcLine: String = "", srcClass:String = "")
然後我使用該日誌方法如下:
log(msg, s"$F_",s"$L_",s"$C_")
其中F_,L_和C_是在宏中定義。現在
,我想創建一個快捷方式,以避免這種情況的樣板,只是稱:
log(msg)
應自動
log(msg, s"$F_",s"$L_",s"$C_")
代替我可以定義一個宏來做到這一點:
def log_(msg: String) : Unit = macro logImpl
def logImpl(c: Context)(msg: c.Expr[String]): c.Expr[Unit] = {
import c.universe._
reify(log(msg.splice, srcFile=s"$F_", srcLine=s"$L_", srcClass=s"$C_"))
}
但同樣,這個宏所需要的項目,其中日誌之前被編譯函數本身被定義...所以我不明白如何解決編譯依賴關係週期...
任何有關如何做到這一點的建議? 謝謝
什麼阻止你將'log'函數移動到宏項目? –
由於日誌功能相當複雜,它並不覺得「乾淨」......我必須將許多部件從我的核心項目移至宏觀項目。我希望能有更好的方式 – borck