创建函数,该函数接受声明隐式写入的对象

时间:2016-02-24 18:20:24

标签: scala playframework

这是我问题的一个愚蠢的例子,忽略了问题的语义

我有两组对象,每组都定义一个隐式writes函数:

case class User(id: Int, name: String)                      // Defines an implicit writes
case class Group(id: Int, membersCount: Int, adminID: Int)  // Defines an implicit writes

如何创建一个接受任何定义隐式写入功能的参数的函数?这样我就可以将任一对象的实例传递给该函数:

def format(w: DefinesWrites): JsValue = {
   ...
}

1 个答案:

答案 0 :(得分:1)

您可以将隐式Writes作为附加隐式参数传递:

def format[T](w: T)(implicit wr: Writes[T]): JsValue = ???

如果在您调用此函数的位置有一个隐式Writes[T],它将自动传递。但如果没有Writes[T]可用,则无法编译。

例如:

val user = User(1, "user")
format(user) // works if there is an implicit Writes[User] in scope.

您还可以使用等效的简写语法和context bound

def format[T: Writes](w: T): JsValue = ???