2015-04-30 52 views
9

Yakın zamanda oyuna başladım & reaktif mongo. Bir SimpleAlbum oluşturmak için reactive mongo documentation başvurdu. Oynatma uygulamasını çalıştırdığımda "Üst düzey düzenleyiciler üst düzey nesneler için kullanılamaz" gibi bir hata alıyorum. Neden bunu alıyorum? Sorunu çözmemde bana yardımcı olun. Paket düzeyinde kullanılamıyor`örtük 'değiştirici üst düzey nesneler için kullanılamaz

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")) 
} 
} 

cevap

12

. Sen mesela, sen implicits gereken yere daha sonra içe ki başka bir nesneye içinde senin örtülü nesneleri koymak gerekir:

object MyImplicits { 

    implicit object SimpleAlbumWriter .... 

    implicit object SimpleAlbumReader .... 
} 

ve sonra implicits erişmesi gereken yere sadece bir parçası olarak

import MyImplicits._ 

koymak paketin ithalatı.

DÜZENLEME: @mz package nesnesini kullanarak, işaret olarak, ve böyle bir paket düzeyinde implicits tanımlayabiliriz:

package models 

package object Implicits { 

    implicit object SimpleAlbumWriter .... 

    implicit object SimpleAlbumReader .... 
} 

olan aynı şekilde ithalat:

import models.Implicits._ 
+2

Ayrıca bir 'paket nesnesi 'kullanılabilir. –

+0

Bunu merak ediyordum. Üst düzey kısıtlamanın paket nesne düzeyinde –

+0

Evet zorlandığından emin olmadı, bu, nesne adının paket yolu ile çakışabileceği özel bir durumdur ve "paket nesnesi" içindeki her şey bu paketin kapsamındadır. ör., 'paket nesne modelleri {val a = 1}' 'paket modelleri' boyunca kullanılabilir 'a' yapar. –

İlgili konular