如何重构我的代码,以便我的 for 表达式中没有 if 语句?
我得到一个执行异常:
[NoSuchElementException: Future.filter predicate is not satisfied]
我正在下面定义一个if选项,这导致了问题:
val maybeUserFut: Future[Option[User]] =
for {
usernameOpt <- lookupUsername("...")
if usernameOpt.isDefined
userOpt <- getUser(usernameOpt.get)
} userOpt
我应该开始使用什么模式来避免此错误?
for {
usernameOpt <- lookupUsername("...")
if usernameOpt.isDefined
userOpt <- getUser(usernameOpt.get)
} yield userOpt
被转化成
lookupUsername("...")
.withFilter({ usernameOpt => usernameOpt.isDefined })
.flatMap({ usernameOpt =>
getUser(usernameOpt.get).map({ userOpt =>
userOpt
})
})
< code>Future.withFilter定义为(source):
def filter(p: T => Boolean)(implicit executor: ExecutionContext): Future[T] =
map {
r => if (p(r)) r else throw new NoSuchElementException("Future.filter predicate is not satisfied")
}
因此,没有一个简单的转换会起作用。
我可能会这样写:
lookupUsername("...").flatMap({ usernameOpt =>
usernameOpt match {
case None => Future.successful(None)
case Some(username) => getUser(username)
}
})
如果您想使用< code>for comprehension语法,您将需要一个像Scalaz OptionT这样的monad转换器,它将显式提升抽象为< code>Future(例如< code>case None =
import scalaz._
import Scalaz._
import scalaz.OptionT._
val maybeUserFut: Future[Option[User]] =
(for {
username <- optionT(lookupUsername("..."))
user <- optionT(getUser(username))
} yield user).run
我在正确表达ElasticSearch regexp过滤器的regexp时遇到了问题。我正在尝试匹配url字段中“info-for/media”中的任何内容,例如http://mydomain.co.uk/info-for/media/press-release-1。为了尝试获得正确的正则表达式,我现在使用,但最终将是带有用户查询字符串的。 发布到localhost:9200/_search 这返
所以浮点运算是不精确的,但这并不能完全解释这里发生的事情:
建议将以下语句更改为NetBeans中的lambda表达式。 但是,当我应用假定的更改(Alt Enter)时,我得到了: 当这不会与消息一起编译时: 没有找到合适的构造函数为KeyFrame(持续时间,(事件前夕[…]}}})-参数不匹配 问题是为什么NetBeans会提出一些它无法实现的东西?如何在Timeline构造函数中实际使用lambda函数?谢谢
指定在表达式计算结果为 TRUE 时执行的命令。 if(表达式) 备注 包含表达式的 if 语句与像 If FoundColor <> Blue 这样的传统 if 语句的区别是,它在单词“if”后的字符为左大括号。尽管通常把整个表达式包围在括号中,不过也可以写成这样:if (x > 0) and (y > 0)。此外, 如果单词 "if" 后是 函数调用 或者类似 "not" 或 "!" 的运算符
问题内容: 我有一个查询,看起来像这样: 导致以下异常: 如果删除DISTINCT关键字,查询将运行没有问题。如果删除order by子句,则查询运行不会出现问题。不幸的是,我似乎无法获得没有重复的有序结果集。 问题答案: 您正在尝试使用未计算的列对结果进行排序。如果您不在那里,那将不是问题,但是由于查询基本上只按列分组,因此如何将结果集与可以具有相同值的其他列进行排序 ?
我有以下代码: 这会导致错误: 但是,在以下情况下(其中三元表达式中的括号已被删除): 没有错误,欢迎消息显示正确。 为什么会这样呢?在我的印象中,括号在三元表达式中是可选的。我认为这与求值的顺序有关,但是由于三元表达式在不同的行上,所以< code>let person = {...,我不清楚为什么会发生这种情况。 事实上,在我正在学习的JavaScript课程中,教师展示了下面的例子,无论有没