这是我问题的一个愚蠢的例子,忽略了问题的语义
我有两组对象,每组都定义一个隐式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 = {
...
}
答案 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 = ???