/** A marker indicating that a `java.lang.Runnable` provided to `scala.concurrent.ExecutionContext`
* wraps a callback provided to `Future.onComplete`.
* All callbacks provided to a `Future` end up going through `onComplete`, so this allows an
* `ExecutionContext` to special-case callbacks that were executed by `Future` if desired.
*/
trait OnCompleteRunnable {
self: Runnable =>
}
当我在scala中检查Future的源代码时,我无法理解为什么self:Runnable =>以上编译。 我知道符号=>可以在方法参数中用作名称调用,也可以用于定义函数。上面的代码似乎定义了一个函数,但它让我很困惑。
答案 0 :(得分:11)
此语法表示explicitly typed self reference。它实质上意味着扩展OnCompleteRunnable
的任何内容也必须扩展Runnable
。
您可能想知道这与普通继承有何不同:
trait OnCompleteRunnable extends Runnable
简而言之,不同之处在于自键型引用只是一种类型约束。它不会建立子类型关系,因此OnCompleteRunnable
无法实现或覆盖Runnable
中的任何内容。所以它就像一种较弱的继承形式。