2

私はこのドメインオブジェクトを持っています:

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

age オプション フィールドを使用します。だから私は自分の工場を定義しました:

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]                           ^

これの何が問題なのですか?

4

3 に答える 3

4

たぶん、あなたは書くことができます

override def factory(dbo: DBObject): Option[Person] = 
    for {
      n <- name from dbo
      z <- email from dbo
    } yield new Person(n, age from dbo, z)
于 2010-12-17T16:54:20.827 に答える
3

amsaykの答えの変形ですが、もう少し対称的です

for {
      n <- name from dbo
      t = age from dbo
      z <- email from dbo
    } yield new Person(n, t, z)
于 2010-12-19T17:47:40.463 に答える
1

Some オブジェクトで t をラップする必要があります

} yield new Person(n, Some(t), z)
于 2010-12-17T17:15:45.417 に答える