我只是试着学习SORM,并玩一些我认为是简单的示例代码。使:
case class Book(var author:String, var title:String);
object Db extends Instance(
entities = Set(Entity[Book]()),
url = "jdbc:h2:mem:test",
user = "",
password = "",
initMode = InitMode.Create
)然后:
val b : Book with Persisted = Db.save( Book("foo","bar") )当我试图编译它时,我得到:
[error] /Users/rjf/IdeaProjects/PlayTest/app/controllers/Application.scala:22: type mismatch;
[error] found : models.Book
[error] required: sorm.Persisted with models.Book
[error] val b : Book with Persisted = Db.save( Book("foo","bar") )
[error] ^如果我将Book声明更改为:
case class Book(var author:String, var title:String) extends Persisted;然后我得到:
[error] /Users/rjf/IdeaProjects/PlayTest/app/models/Book.scala:17: class Book needs to be abstract, since:
[error] it has 2 unimplemented members.
[error] /** As seen from class Book, the missing signatures are as follows.
[error] * For convenience, these are usable as stub implementations.
[error] */
[error] def id: Long = ???
[error] def mixoutPersisted[T]: (Long, T) = ???
[error] case class Book(var author:String, var title:String) extends Persisted;
[error] ^为新手的问题道歉。毫无疑问,我同时学习Scala是一个因素。
发布于 2013-11-17 13:47:41
要解决问题,只需删除显式类型注释:
val b = Db.save( Book("foo","bar") )别担心,您仍然可以访问与Book with Persisted相同的接口。
至于为什么会发生这种情况,这似乎是Scala和据报道的一个bug。
旁白
不要在case类声明中使用var。不变性是案例类的全部要点。正确的声明是:
case class Book(author:String, title:String)这和
case class Book(val author:String, val title:String)https://stackoverflow.com/questions/20025098
复制相似问题