类型不匹配。必需:布尔值,在 Scala 中找到:Future[Boolean]

Posted

技术标签:

【中文标题】类型不匹配。必需:布尔值,在 Scala 中找到:Future[Boolean]【英文标题】:Type mismatch. Required: Boolean, found: Future[Boolean] in scala 【发布时间】:2021-11-08 18:11:41 【问题描述】:

大家好,我是 Scala 新手。我的代码中有一个 if/else 条件,它将通过布尔变量(这是一个未来)检查某些内容,但它显示“类型不匹配。必需:布尔值,找到:未来 [布尔值]”。我怎样才能让它发挥作用?

    autoCondition      = configRepository.getAutoCondition //Future[Boolean] variable.
.
. //some other stuff here
.
yield if (autoCondition) page else autoPage

【问题讨论】:

【参考方案1】:

autoConditionFuture[Boolean]。使用此类值的常用方法是对其进行映射。

autoCondition.map(if (_) page else autoPage)
// short for:
autoCondition.map(x => if (x) page else autoPage)

但是您问题中的代码不完整。你似乎已经开始理解了。如果理解超过Future,您可能只需要像这样更改您的代码

for 
  // other stuff ...
  autoCondition <- configRepository.getAutoCondition
  // other stuff ...
 yield if (autoCondition) page else autoPage

如果您在 for-comprehension 中使用 &lt;-,该代码将被转换为一系列 mapflatMap 调用。

【讨论】:

【参考方案2】:

看起来你正在使用 scala future(也许你正在连接到 db 或类似的东西 你可以做两件事中的一件

1:未来的地图。这意味着您的代码看起来像这样

configRepository.getAutoCondition.map
condition =>
if(condition) page else autoPage

注意:这也将返回您的页面/自动页面返回的任何数据类型的 Future

2:您可以使用等待。这将等待 x 时间间隔的结果并返回布尔值。你的代码看起来像这样

import scala.concurrent._
import scala.concurrent.duration._
val conditionVariable=Await.result(configRepository.getAutoCondition, 100 nanos)
if(conditionVariable) page else autoPage

第二个变量是你要等待的时间

Ps:第二种方法会使您的函数调用同步。所以技术上不推荐。但是,查看您的代码似乎您正在执行页面调用。明智地使用这两种中的一种

【讨论】:

以上是关于类型不匹配。必需:布尔值,在 Scala 中找到:Future[Boolean]的主要内容,如果未能解决你的问题,请参考以下文章

错误:类型不匹配:推断类型为单位,但应为布尔值

ByRef 参数类型与布尔值不匹配

错误:类型不匹配:推断类型是字符串?但布尔值是预期的

访问:在查询条件中使用布尔函数的数据类型不匹配

Kotlin - 类型不匹配:推断类型是 Any?但布尔值是预期的

因为该组节的条件字段不存在或无效所以无法打印