我最近开始从事游戏和娱乐工作。反应性蒙戈。提到reactive mongo documentation以创建SimpleAlbum。当我运行播放应用程序时,我收到一个错误,如“隐式修饰符不能用于顶级对象”。我为什么要这个?帮助我解决问题。感谢
package models
import org.joda.time.DateTime
import reactivemongo.bson._
case class SimpleAlbum(
title: String,
releaseYear: Int,
hiddenTrack: Option[String],
allMusicRating: Option[Double])
implicit object SimpleAlbumWriter extends BSONDocumentWriter[SimpleAlbum] {
def write(album: SimpleAlbum): BSONDocument = BSONDocument(
"title" -> album.title,
"releaseYear" -> album.releaseYear,
"hiddenTrack" -> album.hiddenTrack,
"allMusicRating" -> album.allMusicRating)
}
implicit object SimpleAlbumReader extends BSONDocumentReader[SimpleAlbum] {
def read(doc: BSONDocument): SimpleAlbum = {
SimpleAlbum(
doc.getAs[String]("title").get,
doc.getAs[Int]("releaseYear").get,
doc.getAs[String]("hiddenTrack"),
doc.getAs[Double]("allMusicRating"))
}
}
答案 0 :(得分:14)
implicit
无法在包级别使用。您需要将隐式对象放在另一个对象中,然后可以在需要隐含的位置导入该对象,例如:
object MyImplicits {
implicit object SimpleAlbumWriter ....
implicit object SimpleAlbumReader ....
}
然后你需要访问implicits的地方
import MyImplicits._
作为包导入的一部分。
编辑:正如@ m-z指出的那样,使用package
对象,您可以在包级别定义隐含,如下所示:
package models
package object Implicits {
implicit object SimpleAlbumWriter ....
implicit object SimpleAlbumReader ....
}
以相同的方式导入:
import models.Implicits._
答案 1 :(得分:0)
隐式类需要添加到对象中:
object StudentTest {
implicit class stringUtils(myString:String){
def scalaWordCount(): Map[String, Int] ={
val split=myString.split("\\s+")
val grouped=split.groupBy(word=>word)
val counterPerKey=grouped.mapValues(group=>group.length)
counterPerKey
}
}