类型不匹配。必需:布尔值,发现:scala 中的 Future[Boolean]
Type mismatch. Required: Boolean, found: Future[Boolean] in scala
大家好,我是 Scala 的新手。我的代码中有一个 if/else 条件,它将通过布尔变量(未来)检查某些内容,但它说“类型不匹配。必需:布尔值,找到:Future [Boolean]”。我怎样才能让它发挥作用?
autoCondition = configRepository.getAutoCondition //Future[Boolean] variable.
.
. //some other stuff here
.
yield if (autoCondition) page else autoPage
autoCondition
是一个 Future[Boolean]
。使用这种值的通常方法是映射它。
autoCondition.map(if (_) page else autoPage)
// short for:
autoCondition.map(x => if (x) page else autoPage)
但是你问题中的代码并不完整。您似乎已经在进行理解工作。如果那个 for-comprehension 结束了 Future
,你可能只需要像这样更改你的代码
for {
// other stuff ...
autoCondition <- configRepository.getAutoCondition
// other stuff ...
} yield if (autoCondition) page else autoPage
如果您在 for-comprehension 中使用 <-
,该代码将被翻译成一系列 map
和 flatMap
调用。
看起来你正在使用 scala future(也许你正在连接到数据库或类似的东西
你可以做两件事中的一件
1:映射未来。这意味着您的代码看起来像这样
configRepository.getAutoCondition.map{
condition =>
if(condition) page else autoPage
}
注意:这也会 return 任何数据类型的未来 page/autoPage returns
2:您可以使用 Await。这将等待 x 时间间隔的结果,并且 return 你会得到布尔值。你的代码看起来像这样
import scala.concurrent._
import scala.concurrent.duration._
val conditionVariable=Await.result(configRepository.getAutoCondition, 100 nanos)
if(conditionVariable) page else autoPage
其中第二个变量是您要等待的时间
Ps:第二种方法将使您的函数调用同步。所以技术上不推荐。但是,查看您的代码似乎是在进行页面调用。明智地使用这两个中的一个
大家好,我是 Scala 的新手。我的代码中有一个 if/else 条件,它将通过布尔变量(未来)检查某些内容,但它说“类型不匹配。必需:布尔值,找到:Future [Boolean]”。我怎样才能让它发挥作用?
autoCondition = configRepository.getAutoCondition //Future[Boolean] variable.
.
. //some other stuff here
.
yield if (autoCondition) page else autoPage
autoCondition
是一个 Future[Boolean]
。使用这种值的通常方法是映射它。
autoCondition.map(if (_) page else autoPage)
// short for:
autoCondition.map(x => if (x) page else autoPage)
但是你问题中的代码并不完整。您似乎已经在进行理解工作。如果那个 for-comprehension 结束了 Future
,你可能只需要像这样更改你的代码
for {
// other stuff ...
autoCondition <- configRepository.getAutoCondition
// other stuff ...
} yield if (autoCondition) page else autoPage
如果您在 for-comprehension 中使用 <-
,该代码将被翻译成一系列 map
和 flatMap
调用。
看起来你正在使用 scala future(也许你正在连接到数据库或类似的东西 你可以做两件事中的一件
1:映射未来。这意味着您的代码看起来像这样
configRepository.getAutoCondition.map{
condition =>
if(condition) page else autoPage
}
注意:这也会 return 任何数据类型的未来 page/autoPage returns
2:您可以使用 Await。这将等待 x 时间间隔的结果,并且 return 你会得到布尔值。你的代码看起来像这样
import scala.concurrent._
import scala.concurrent.duration._
val conditionVariable=Await.result(configRepository.getAutoCondition, 100 nanos)
if(conditionVariable) page else autoPage
其中第二个变量是您要等待的时间
Ps:第二种方法将使您的函数调用同步。所以技术上不推荐。但是,查看您的代码似乎是在进行页面调用。明智地使用这两个中的一个