2014-08-28 161 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