Scala 在本例中,为什么隐式的名称似乎会影响其范围解析?
我正在为java.io.File编写一个简单的JSON序列化程序,只是插入了路径:Scala 在本例中,为什么隐式的名称似乎会影响其范围解析?,scala,implicit,play-json,Scala,Implicit,Play Json,我正在为java.io.File编写一个简单的JSON序列化程序,只是插入了路径: import java.io.File import play.api.libs.json._ import Implicits.File._ object Implicits { object File { implicit val format: Format[File] = new Format[File] { override def writes(o: File): JsVa
import java.io.File
import play.api.libs.json._
import Implicits.File._
object Implicits {
object File {
implicit val format: Format[File] = new Format[File] {
override def writes(o: File): JsValue = JsString(o.toString)
override def reads(js: JsValue): JsResult[File] = js.validate[String].map(f => new File(f))
}
}
}
final case class Bar(path: File)
object Bar {
implicit val format: Format[Bar] = Json.format
}
我发现上述方法不起作用:
No instance of play.api.libs.json.Format is available for java.io.File in the implicit scope
但是,如果我将Implicit.File.format的名称更改为Implicit.File.fmt,它就可以正常工作
在这种情况下,当名称应该是隐式范围解析器应该关心的类型Format[File]时,为什么名称会发生冲突
我正在使用play json 2.6.7
在这种情况下,当名称应该是隐式范围解析器应该关心的类型Format[File]时,为什么名称会发生冲突
因为它也关心名字
在implicit val format:format[Bar]=Json.format行中,format表示Bar.format而不是Implicits.File.format,因此Implicits.File.format不符合此规则的隐式格式。它不在伴生对象中,因此也不在第二类中。可能是宏问题。我想这是因为Imlicit.file.format和Bar.format的名称冲突。您可以将Bar.format重命名为fix。@igorpcholkin这就是我的问题所说的。@cchantep这也是我的猜测。我打开了一个问题。我一直在使用隐式val格式。。。自从我开始编写scala以来,我的所有代码都出现了名称冲突,这是我第一次看到名称冲突。但我猜你在companion对象中也出现了这种情况,这是一条单独的规则。啊哈!好的推论。