0

我正在尝试将隐式写入声明从嵌入式对象导入到一个函数中,该函数基于一组案例类生成 JSON 对象。

case class TestModel(test:String)

object TestModel {

  def manyToJSON(models: List[TestModel]) = {
    import writes.micro
    Json.toJson(models) 
  }

  object writes {
    implicit val micro = Json.writes[TestModel]
  }
}

不幸的是,scala 编译器抱怨:

未找到类型 List[models.TestModel] 的 Json 序列化程序。尝试为此类型实现隐式写入或格式。

有趣的是,如果我在方法中使用 write 对象作为纯表达式,它的工作原理。

object TestModel {

  def manyToJSON(models: List[TestModel]) = {
    import writes.micro
    writes.micro
    Json.toJson(models) 
  }

  object writes {
    implicit val micro = Json.writes[TestModel]
  }
}

我将如何更改我的代码以具有隐式范围?

4

1 回答 1

1

案例类隐式不起作用的原因是它只是一个定义而不是值。用例对象将像对象一样解决这个问题。考虑这段代码:

object MainClass {


  def main(args: Array[String]) {

    TestModel.manyToJSON(Nil)
  }
}

case class TestModel(test:String)

object TestModel {

  def manyToJSON(models: List[TestModel]) = {
    import writes._
    def print(implicit x: Int) = {
      println(x)
    }

    print // print 3
  }

  object writes {
    implicit val x: Int = 3
    //implicit val x = 3 //compilation error

  }
}
于 2014-07-30T12:00:03.800 回答