Scala - 将函数传递给 Future.apply
Scala - Passing a function to Future.apply
我正在学习 Scala,只是熟悉语法。我看到 Future.apply
将函数作为工作要做。
以下完美运行:
val future = Future { doWork(1) }
然而,为了实验,我尝试了其他一些方法,但都没有效果。
val future = Future(() => doWork(1))
这导致 lambda 成为未来的完成值,而不是 doWork(1)
的 return 值。
val work: () => Int = () => doWork(index)
val future = Future(work)
这里也是一样的情况。有人可以解释为什么将函数作为要完成的工作传递而不是导致函数实际上成为正在完成的工作的 return 值。另外我将如何处理这个问题。谢谢!
在 Future {...}
中调用的方法的签名是 def apply[T](body: =>T)
,其中 => T
是一个 by-name
参数。有关详细信息,请参阅此 documentation。
By-name parameters are only evaluated when used.
在例子中
Future(() => doWork(1))
和
val work: () => Int = () => doWork(index)
val future = Future(work)
您正在作为 by-name
类型 () => Int
或与 Function0[Int]
相同的参数函数传递。当计算 by-name
参数时,此函数在 Future
中返回。
函数未计算,因为 Future
未调用 apply
或 ()
。
如果在所有示例中的Future
中添加类型参数,将更易于理解。如doWork
returnsInt
。在这种情况下,Future { doWork(1) }
是 Future[Int]
,而在第二个和第三个示例中是 Future[Function0[Int]]
。
正确的用法是
val work: () => Int = () => doWork(index)
val future = Future(work())
我正在学习 Scala,只是熟悉语法。我看到 Future.apply
将函数作为工作要做。
以下完美运行:
val future = Future { doWork(1) }
然而,为了实验,我尝试了其他一些方法,但都没有效果。
val future = Future(() => doWork(1))
这导致 lambda 成为未来的完成值,而不是 doWork(1)
的 return 值。
val work: () => Int = () => doWork(index)
val future = Future(work)
这里也是一样的情况。有人可以解释为什么将函数作为要完成的工作传递而不是导致函数实际上成为正在完成的工作的 return 值。另外我将如何处理这个问题。谢谢!
在 Future {...}
中调用的方法的签名是 def apply[T](body: =>T)
,其中 => T
是一个 by-name
参数。有关详细信息,请参阅此 documentation。
By-name parameters are only evaluated when used.
在例子中
Future(() => doWork(1))
和
val work: () => Int = () => doWork(index)
val future = Future(work)
您正在作为 by-name
类型 () => Int
或与 Function0[Int]
相同的参数函数传递。当计算 by-name
参数时,此函数在 Future
中返回。
函数未计算,因为 Future
未调用 apply
或 ()
。
如果在所有示例中的Future
中添加类型参数,将更易于理解。如doWork
returnsInt
。在这种情况下,Future { doWork(1) }
是 Future[Int]
,而在第二个和第三个示例中是 Future[Function0[Int]]
。
正确的用法是
val work: () => Int = () => doWork(index)
val future = Future(work())