Scala错误表明val不是模型对象的成员,尽管它是?

cro*_*ies 3 scala

简介:我从成员事务表中提取用户ID列表,然后用于从数据库生成用户列表.然后,这将用于生成发送到列出与帐户关联的用户的页面的JSON.

背景:在游戏中使用Squeryl的Scala代码!骨架

错误: value id is not a member of Option[models.User]将用户映射到JSON生成器时

代码:这里的代码连续用于最终生成JSON

def memberIds(accountId: Long) = { from(DB.members)(m =>
      where(m.accountId === accountId)
        select (m)).map(_.userId).toSet
  }

def membersToAccount(id: Long) = {
    memberIds(id).map( i => models.User.get(i))
  }

def listMembers(accountId: Long) = {
    Json(generate(Account.membersToAccount(accountId)
      .map(user => Map(
      "id" -> user.id,
      "name" -> user.name,
      "username" -> user.username
    ))))
  }
Run Code Online (Sandbox Code Playgroud)

困惑: User类包含一个id值,看起来case class User( val id: Long, etc.我很困惑为什么会产生这个错误.是语法问题还是我映射用户的问题?谢谢!

om-*_*nom 7

那是因为models.User被包装在Option容器中(实际上,就是monad).这就像尝试直接在用户列表上调用User的方法,如:List(someUsers).id

基本上这意味着,这个值可以是Some(非null包装器)或Nothing(就像null更好).

此外,最好不要get在选项上使用,请考虑上面的链接以获取详细信息.