2014-08-28 83 views
1

我試圖總結劇中JSON寫入宏擴展包宏擴展方法

def encoder[T] = Json.writes[T]

T是未知的,這樣就不會編譯,它抱怨

no unapply method found

我知道我可以用JsMacroImpl.reads擴展代替Json.writes[T]。 有沒有更好的方法來做到這一點?

回答

2

我在一段時間後面臨類似的問題。你可以做這樣的事情。

創建一個對象,並在裏面編寫編碼器方法作爲宏的方法。

object SomeObj { 
    def encoder[T] = macro encoderRedirect_impl[T] 

    def encoderRedirect_impl[T : c.WeekTypeTag](c:Context) = { 
    q"Json.writes[${c.weakTypeOf[T]}]" 
    } 
} 

這是我理解的宏重定向。但是你必須在獨立的項目中編寫這段代碼,並將其用作項目的依賴項。

+0

不會用scala編譯2.11 – jilen 2014-08-29 03:36:43

+0

@tiran可能意味着weakTypeOf。我已經修復了代碼。 – 2014-08-29 07:58:17

+0

@EugeneBurmako儘管'weekTypeOf'對於「專業菜單」 – 2014-08-29 09:08:34