包装宏扩展方法

时间:2014-08-28 21:57:21

标签: scala playframework scala-macros

我正在尝试包装播放json写宏扩展

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

但是T是未知的,所以不会编译,它会抱怨

no unapply method found

我知道我可以用Json.writes[T]扩展替换JsMacroImpl.reads。 这样做有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

一段时间后我遇到了类似的问题。你可以做这样的事情。

创建一个对象和内部写入编码器方法作为宏方法。

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

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

这是我理解的宏重定向。但您必须在单独的项目中编写此代码,并将其用作项目的依赖项。