я кодирование для понимания, и спрашиваю что-то:Либо, Опция и для постижений
def updateUserStats(user: User): Either[Error,User] = for {
stampleCount <- stampleRepository.getStampleCount(user).right
userUpdated <- Right(copyUserWithStats(user,stampleCount)).right // ?????????
userSaved <- userService.update(userUpdated).right
} yield userSaved
def copyUserWithStats(user: User, stamples: Long): User = {
val newStats = user.userStats.copy(stamples = stamples)
user.copy(userStats = newStats)
}
Кажется, используя copyUserWithStats, который не возвращает либо не может быть использован непосредственно в для понимания, потому что это не имеет методов map/flatMap.
Так интересно, в этом случае, является подходящим решением для использования Right(copyUserWithStats(user,stampleCount)).right
Это, кажется, работает, по крайней мере ...
Кстати, я также попытался с опцией, но Бесполезный» t, может кто-нибудь объяснить почему?
def updateUserStats(user: User): Either[Error,User] = for {
stampleCount <- stampleRepository.getStampleCount(user).right
userUpdated <- Some(copyUserWithStats(user,stampleCount))
userSaved <- userService.update(userUpdated).right
} yield userSaved
Благодаря
Вы пытались создать такие переменные? Это не работает для меня с «Либо». – huynhjl
http://stackoverflow.com/questions/10688447/scala-either-rightprojection-confusion-for-comprehension-de-sugaring – huynhjl
Thanks huynhjl. Честно говоря, я просто ожидал, что это сработает и не пробовал. – drexin