gpt4 book ai didi

scala - Future.onComplete : can't understand the method signature

转载 作者:行者123 更新时间:2023-12-04 21:40:25 25 4
gpt4 key购买 nike

  /** When this future is completed, either through an exception, or a value,
* apply the provided function.
*
* If the future has already been completed,
* this will either be applied immediately or be scheduled asynchronously.
*
* $multipleCallbacks
* $callbackInContext
*/
def onComplete[U](func: Try[T] => U)(implicit executor: ExecutionContext): Unit

基本用法似乎是:
  result.onComplete({
case Success(listInt) => {
//Do something with my list
}
case Failure(exception) => {
//Do something with my error
}
})

这个函数似乎对产生副作用很有用,因为它返回 Unit(如日志记录完成)
我不明白这是什么类型 U函数返回。我们提供的函数的返回类型真的有用吗? Scala 如何使用它?

同样的问题也适用于 onSuccessonFailure
编辑:更清楚地说, def onComplete[U](func: Try[T] => U) 的好处是什么?在 def onComplete(func: Try[T] => Unit) ?

编辑 :

Chirlo 是对的,U 类型的函数更灵活,我们可以更轻松地将不返回 Unit 的现有函数传递给它。
type T = String

def onComplete[U](func: Try[T] => U): Unit = { }
def onComplete2(func: Try[T] => Unit): Unit = { }

// Existing function that does not return Unit
def log[T]( t : Try[T]): Int = 0

onComplete(log) // This compiles fine
onComplete2(log) // This does not compile

最佳答案

它使功能更加灵活。如果它会返回 Unit ,你可以把它传递给函数 Try[T] => Unit ,但通过返回 U ,您可以将任何需要 Try[T] 的函数传递给它作为一个参数,你可能已经躺着了。例如:

def log[T]( t : Try[T]): Int =  //write to file and return 0  if Ok, else 128

这个函数有副作用,但也会返回一个值。您现在可以将此函数传递给您的 Future虽然它没有返回 Unit ,结果被丢弃,但您可以重用已经存在的函数。

关于scala - Future.onComplete : can't understand the method signature,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27920005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com