Scala - 如何从平面地图 return 简单的原始类型值?
Scala - How to return simple raw type value from flat map?
我有一个简单的代码,我只想获得一个 boolean
值,但它包含在 Future
对象中:
def getValue(arg: String) : Boolean = for {
data <- SomeObject.getData(arg) //SomeObject is in class constructor
value = data.getBooleanValue
} yield value
这里的问题是我需要 return Future[Boolean]
而不是简单的 boolean
。如何将其更改为 return 仅原始类型?
只要你调用一个 API 那个 return s Future
你需要链接你的代码以在 Future
完成时尽可能地执行.尽可能避免等待 Future
完成。
所以把方法改成return Future
:
def getValue(arg: String): Future[Boolean] =
SomeObject.getData(arg).map(_.getBooleanValue)
然后而不是调用
nextMethod(getValue(myArg))
像这样在 Future
上使用 map
:
getValue(myArg).map{ bool =>
nextMethod(bool) // next processing step
}
这将给出一个新的 Future
,其中将包含下一步处理的结果。
虽然这确实需要重新编写调用代码,但 Scala 使此类代码非常容易编写。继续将操作链接到前一个 Future
,直到处理完成。
在大多数情况下,代码将以发送消息或写入文件等副作用操作结束,在这种情况下,无需等待 Future
完成。
在极少数情况下,当您确实需要等待 Future
时,请使用 Await.result
恢复 Future
s
链的最终结果
我有一个简单的代码,我只想获得一个 boolean
值,但它包含在 Future
对象中:
def getValue(arg: String) : Boolean = for {
data <- SomeObject.getData(arg) //SomeObject is in class constructor
value = data.getBooleanValue
} yield value
这里的问题是我需要 return Future[Boolean]
而不是简单的 boolean
。如何将其更改为 return 仅原始类型?
只要你调用一个 API 那个 return s Future
你需要链接你的代码以在 Future
完成时尽可能地执行.尽可能避免等待 Future
完成。
所以把方法改成return Future
:
def getValue(arg: String): Future[Boolean] =
SomeObject.getData(arg).map(_.getBooleanValue)
然后而不是调用
nextMethod(getValue(myArg))
像这样在 Future
上使用 map
:
getValue(myArg).map{ bool =>
nextMethod(bool) // next processing step
}
这将给出一个新的 Future
,其中将包含下一步处理的结果。
虽然这确实需要重新编写调用代码,但 Scala 使此类代码非常容易编写。继续将操作链接到前一个 Future
,直到处理完成。
在大多数情况下,代码将以发送消息或写入文件等副作用操作结束,在这种情况下,无需等待 Future
完成。
在极少数情况下,当您确实需要等待 Future
时,请使用 Await.result
恢复 Future
s