Scala + MongoDB: необязательные поля и неизменяемые - PullRequest
2 голосов
/ 17 декабря 2010

У меня есть этот доменный объект:

case class Person (
  name : String,
  age: Option[Int],
  email : String
) extends MongoObject

с дополнительным полем возраста. Итак, я определил свою фабрику:

object Person extends MongoObjectShape[Person] {
  lazy val name = Field.scalar("name", _.name)
  lazy val age = Field.optional("age", t => t.age)
  lazy val email = Field.scalar("email", _.email)

  override lazy val * = name :: age :: email :: Nil
  override def factory(dbo: DBObject): Option[Person] = 
    for {
      n <- name from dbo
      t <- age from dbo
      z <- email from dbo
    } yield new Person(n, t, z)
}

но он не компилируется, так как я получаю:

[error]  found   : Int
[error]  required: Option[Int]
[error]     } yield new Person(n, t, z)
[error]                           ^

Что с этим не так?

Ответы [ 3 ]

4 голосов
/ 17 декабря 2010

может быть, вы могли бы написать

override def factory(dbo: DBObject): Option[Person] = 
    for {
      n <- name from dbo
      z <- email from dbo
    } yield new Person(n, age from dbo, z)
3 голосов
/ 19 декабря 2010

вариант ответа Амсайка, но чуть более симметричный

for {
      n <- name from dbo
      t = age from dbo
      z <- email from dbo
    } yield new Person(n, t, z)
1 голос
/ 17 декабря 2010

Вам нужно обернуть т в некоторый объект

} yield new Person(n, Some(t), z)
...