我正在尝试将嵌入对象中的隐式Write声明导入到一个函数中,该函数根据一组case类生成一个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序列化程序。尝试为此类型实现隐式写入或格式。
有趣的部分是,如果我在方法中使用写对象作为纯表达式,那么它的工作原理。
object TestModel {
def manyToJSON(models: List[TestModel]) = {
import writes.micro
writes.micro
Json.toJson(models)
}
object writes {
implicit val micro = Json.writes[TestModel]
}
}
我如何更改我的代码以隐含范围?
答案 0 :(得分:1)
案例类隐式不起作用的原因是它只是一个定义而不是值。用例对象将解决像object这样的问题。请考虑以下代码:
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
}
}