Scala Anorm为什么scala抱怨结果没有特征?

时间:2013-01-30 05:08:56

标签: scala playframework-2.0 anorm playframework-2.1

我没有看到任何地方这样做但我有以下内容:

abstract class Player { val user_id: Long }
case class AlivePlayer(user_id: Long, target_id: Long) extends Player
case class DeadPlayer(user_id: Long) extends Player

def getPlayers(game: Game):Option[List[Player]] = DB.withConnection { implicit connect =>
  SQL(
    """
      SELECT * FROM game_participants WHERE game_id = {game_id})
    """
  ).on(
    'game_id -> game.id
  ).as(Game.participantParser *)
}

在这种情况下,我收到编译错误,并显示以下消息

error: type mismatch;  found   : anorm.ResultSetParser[List[Product with Serializable with models.Player]]  required: anorm.ResultSetParser[Option[List[models.Player]]]
).as(Game.participantParser *)

为什么仅将返回类型指定为Option[List[Player]]

是不够的

1 个答案:

答案 0 :(得分:1)

如果出现错误消息,则Game.participantParser没有返回Option[List[Player]]而是List[Player]。恕我直言,getPlayers应该只返回一个可能为空的List[Player]

如果您想要返回Option[],则必须在列表前添加Some(...),或者如果列表为空,则只返回None

正如评论中所述,如果没有Game.participantParser定义,则无法再为您提供帮助。

希望这有帮助。