2

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

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

4

1 回答 1

1

鉴于错误消息,听起来它Game.participantParser没有返回Option[List[Player]]但是List[Player]。恕我直言,getPlayers应该只返回一个List[Player]可能为空的。

如果你想返回一个Option[],你必须Some(...)在你的列表前面添加,或者None如果列表为空则只返回。

正如评论中所说,如果没有Game.participantParser定义,就无法进一步帮助您。

希望这可以帮助。

于 2013-03-07T09:50:28.640 回答