【问题标题】:Finding the implicit value for Json in play在游戏中找到 Json 的隐含值
【发布时间】:2015-06-14 02:45:57
【问题描述】:

当我使用以下代码时:

import JsonImpl.graphFormat
val js = Json.toJson(g)(graphFormat)

我的代码可以编译并且工作正常,但是当我这样做时它不起作用并说:“没有为 SGraph 类型找到 Json 序列化程序。尝试为此类型实现隐式写入或格式。”

import JsonImpl.graphFormat
val js = Json.toJson(g)

JsonImpl 是:

object JsonImpl{
    implicit val graphFormat = Json.format[SGraph]
}

我不想为我的SGraph 类使用伴随对象。是什么问题,为什么找不到隐含值?

【问题讨论】:

  • 两者都应该工作,所以你的代码中还有其他东西会导致问题。您可以尝试在实例定义中添加显式返回类型,然后可能是-Xlog-implicits
  • @TravisBrown `键入 graphFormat 解决了它,谢谢!我想学习 Scala 类型系统已经超出了我的能力范围。总有一些东西!
  • 为类型类实例提供显式类型注释总是一个好主意(它应该是强制性的),尤其是在处理宏时。

标签: scala playframework implicit-conversion


【解决方案1】:

为了完整起见:Json.format 是一个宏,当您处理宏时,最好确保您返回的内容是适当的静态类型:

object JsonImpl{
  implicit val graphFormat: Format[SGraph] = Json.format[SGraph]
}

事实上,每当您处理隐式值时,这都是一个好主意,并且可以避免很多混乱(有时是因为您做错了什么,有时是因为编译器有)。

【讨论】:

    猜你喜欢
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    相关资源
    最近更新 更多