理解条件操作的标度

scala for comprehension condition operation

在我的scala程序中,我很少有for-comprehension的操作。我想像这样在里面有一个 if 条件,

user <- userDao.findUser(authToken)
haveDevice <- userDao.haveDevice(deviceId, deviceType)
if (haveDevice) {
   r <- userDao.addDevice(user.id, deviceId, deviceType)
}

但是上面的代码是无效的,怎么办?谢谢

在 for comprehension 中使用 if 条件的正确语法如下所示。

for {
  user <- userDao.findUser(authToken)
  haveDevice <- userDao.haveDevice(deviceId, deviceType)
  r <- userDao.addDevice(user.id, deviceId, deviceType) if haveDevice
}

假设您的 for comprehension 对 Future 进行操作,如果 if 条件失败,则整个理解 returns 一个 failed Future with error

java.util.NoSuchElementException: Future.filter predicate is not satisfied