Scala:尝试使用泛型类型泛化方法
因此,我有这个方法(在play framework/scala中): 我在其范围内还包含以下内容:Scala:尝试使用泛型类型泛化方法,scala,playframework,implicit-conversion,Scala,Playframework,Implicit Conversion,因此,我有这个方法(在play framework/scala中): 我在其范围内还包含以下内容: implicit val fooFormat = Json.format[Foo] implicit val barFormat = Json.format[Bar] No Json serializer found for type T. Try to implement an implicit Writes or Format for this type. 所以,我想我应该重构并创建一个通
implicit val fooFormat = Json.format[Foo]
implicit val barFormat = Json.format[Bar]
No Json serializer found for type T. Try to implement an implicit Writes or Format for this type.
所以,我想我应该重构并创建一个通用方法,如下所示:
def toHttpResponse[T](entity: T) = {
case Ok =>
Ok(Json.toJson(entity))
...
}
而且…现在我得到了这些错误,即使上述隐式在范围内:
implicit val fooFormat = Json.format[Foo]
implicit val barFormat = Json.format[Bar]
No Json serializer found for type T. Try to implement an implicit Writes or Format for this type.
我错过了什么?我知道这和这些秘密有关!感谢指挥员。谢谢
更新:
答复
(路易斯·米格尔·梅西亚·苏亚雷斯)的这一建议很有魅力:
def toHttpResponse[T : Writes]() = {
...
}
写入
实例必须从隐式范围解析:
def toHttpResponse[T](entity: T)(implicit w: Writes[T]) = {
case Ok =>
Ok(Json.toJson(entity))
...
}
写入
实例必须从隐式范围解析:
def toHttpResponse[T](entity: T)(implicit w: Writes[T]) = {
case Ok =>
Ok(Json.toJson(entity))
...
}
我对游戏一无所知。但通常通过添加上下文绑定或隐式参数(它们是等效的)来解决此问题。所以像
def-toHttpResponse[T:Writes](…)
这样的东西应该可以工作refactoring@cchantep你有什么消息来源吗?我以前没听说过。另外,我90%确定我有一些2.13
代码使用上下文边界,没有任何警告。请尝试启用warning@cchantep我刚刚在一个项目上测试了创建一个简单的Show
typeclass,在这个项目中我有sbt-tpocleat
插件(可以启用所有警告)+Scala2.13
。我没有看到任何警告,把它作为上下文绑定。我对游戏一无所知。但通常通过添加上下文绑定或隐式参数(它们是等效的)来解决此问题。所以像def-toHttpResponse[T:Writes](…)
这样的东西应该可以工作refactoring@cchantep你有什么消息来源吗?我以前没听说过。另外,我90%确定我有一些2.13
代码使用上下文边界,没有任何警告。请尝试启用warning@cchantep我刚刚在一个项目上测试了创建一个简单的Show
typeclass,在这个项目中我有sbt-tpocleat
插件(可以启用所有警告)+Scala2.13
。我没有看到任何警告,把它作为上下文绑定。