我有以下对象用于将对象ParsedItemDocument
转换为json
字符串。我应该注意到ParsedItemDocument
是trait
。我的问题是编译器无法识别在第二个片段中调用的隐式转换。隐式转换工作还有什么需要做的吗?斯卡拉隐式转换无法识别
import scala.language.implicitConversions
import wikidataParser.ParsedItemDocument
object Converters {
def toJson(obj: Any): String = {
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
val out = new StringWriter
mapper.writeValue(out, obj)
return out.toString()
}
implicit def parsedItemDocumentToJsonString
(item: ParsedItemDocument): String = {
Converters.toJson(item)
}
}
现在,我使用下面的代码片段在我的代码
import tools.Converters._
import wikidataParser.ParsedItemDocument
class WikipediaRankingTester2 extends FlatSpec {
"It" should "do something" in {
val jsonrdd:RDD[String]=rankedItems.map(t:Long,ParsedItemDocument)=>
t._2.parsedItemDocumentToJsonString)//compilation error here
}
}
有在这个片段中不需要明确coversions。你的编译错误是因为你的代码在语法上是错误的(括号不平衡,t被声明为Long等),而不是隐式转换。我对你的建议是,现在忘记implicits,并专注于掌握scala语法和基本概念。 – Dima
与问题相关(对于搜索者来说这里是这个问题),但不是问题的主体:如果你的隐式转换也需要一个隐式参数......不要忘记有一个隐式值可用。 – bbarker