`implicit' 修饰符不能用于顶级对象
`implicit' modifier cannot be used for top-level objects
我最近开始研究 play & reactive mongo。引用 reactive mongo documentation 创建一个 SimpleAlbum。当我 运行 播放应用程序时,我收到类似 "Implicit modifier cannot be used for top-level objects" 的错误。为什么我得到这个?帮我解决这个问题。谢谢
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"))
}
}
implicit
不能在包级别使用。您需要将隐式对象放入另一个对象中,然后您可以在需要隐式的地方导入该对象,例如:
object MyImplicits {
implicit object SimpleAlbumWriter ....
implicit object SimpleAlbumReader ....
}
然后在你需要访问隐式的地方放
import MyImplicits._
作为包导入的一部分。
编辑:正如@m-z指出的那样,使用package
对象,您可以像这样在包级别定义隐式:
package models
package object Implicits {
implicit object SimpleAlbumWriter ....
implicit object SimpleAlbumReader ....
}
以同样的方式导入:
import models.Implicits._
隐式class需要添加到对象中:
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
}
}
我最近开始研究 play & reactive mongo。引用 reactive mongo documentation 创建一个 SimpleAlbum。当我 运行 播放应用程序时,我收到类似 "Implicit modifier cannot be used for top-level objects" 的错误。为什么我得到这个?帮我解决这个问题。谢谢
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"))
}
}
implicit
不能在包级别使用。您需要将隐式对象放入另一个对象中,然后您可以在需要隐式的地方导入该对象,例如:
object MyImplicits {
implicit object SimpleAlbumWriter ....
implicit object SimpleAlbumReader ....
}
然后在你需要访问隐式的地方放
import MyImplicits._
作为包导入的一部分。
编辑:正如@m-z指出的那样,使用package
对象,您可以像这样在包级别定义隐式:
package models
package object Implicits {
implicit object SimpleAlbumWriter ....
implicit object SimpleAlbumReader ....
}
以同样的方式导入:
import models.Implicits._
隐式class需要添加到对象中:
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
}
}