Scala 布尔值总是返回 false
Scala boolean always returning false
我想知道为什么即使数据库的结果不为空,以下函数 doesMsgExist()
总是 returns false
。
def doesMsgExist(name: String, age: String): Boolean = {
var result = false
val msgExistsFlag = checkExistingMessages(db.getDocument(name, age))
msgExistsFlag.foreach(isTrue => result = if(isTrue) false else true)
result
}
def checkExistingMessages(resultFromDB: Future[List[BSONDocument]]): Future[Boolean] = {
resultFromDB.map { list =>
if (list.isEmpty) {
false
}
else true
}
}
您立即 returning result
但您正在使用 Future
对其进行评估。这意味着正在创建表示计算的对象,但您无法保证 计算将解决。因此,你 return 的值是 false
.
将 Future
视为将来会发生的某些操作的占位符。如果您想捕获实际结果,您应该使用这样的签名来做一些事情:
def doesMsgExist(name: String, age: Boolean): Future[Boolean] =
并使用 Future
进行评估 return。如果没有,您将不得不用 Await
.
将其包围
我想知道为什么即使数据库的结果不为空,以下函数 doesMsgExist()
总是 returns false
。
def doesMsgExist(name: String, age: String): Boolean = {
var result = false
val msgExistsFlag = checkExistingMessages(db.getDocument(name, age))
msgExistsFlag.foreach(isTrue => result = if(isTrue) false else true)
result
}
def checkExistingMessages(resultFromDB: Future[List[BSONDocument]]): Future[Boolean] = {
resultFromDB.map { list =>
if (list.isEmpty) {
false
}
else true
}
}
您立即 returning result
但您正在使用 Future
对其进行评估。这意味着正在创建表示计算的对象,但您无法保证 计算将解决。因此,你 return 的值是 false
.
将 Future
视为将来会发生的某些操作的占位符。如果您想捕获实际结果,您应该使用这样的签名来做一些事情:
def doesMsgExist(name: String, age: Boolean): Future[Boolean] =
并使用 Future
进行评估 return。如果没有,您将不得不用 Await
.