【问题标题】:scala for comprehension condition operationscala 用于理解条件操作
【发布时间】:2017-07-18 23:53:37
【问题描述】:

在我的 scala 程序中,我很少有用于理解的操作。我想在里面有一个这样的 if 条件,

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

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

【问题讨论】:

  • 它犯了什么错误?

标签: scala playframework future


【解决方案1】:

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

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

假设你的 for comprehension 在 Future 上运行,如果 if 条件失败,那么整个理解返回一个失败的 Future 并出现错误

java.util.NoSuchElementException: Future.filter 谓词不是 满意

【讨论】:

  • 如果用户
  • 如果您的 for 理解对 Option 而不是 Future 进行操作,那么对于 None 条件,您将不会得到 NoSuchElementException 异常。而 for 理解的输出将是 None..
猜你喜欢
  • 2022-01-01
  • 2014-07-27
  • 2019-11-17
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
相关资源
最近更新 更多