我在Scala库中看到过这样的几个时间代码。这是什么意思?
trait SecuredSettings {
this: GlobalSettings =>
def someMethod = {}
...
}
答案 0 :(得分:2)
这个技巧被称为"自我类型注释"。
这实际上是同时做两件事:
this
引用的本地别名(在引入嵌套类时可能很有用,因为那时你在范围内有几个this
个对象。)Google for" scala self type annotation"关于这个问题的许多讨论。
scala-lang.org包含对此功能的非常下降的解释: http://docs.scala-lang.org/tutorials/tour/explicitly-typed-self-references.html
有许多模式以非显而易见的方式使用这个技巧。对于首发,请看这里: http://marcus-christie.blogspot.com/2014/03/scala-understanding-self-type.html
答案 1 :(得分:1)
trait A {
def foo
}
class B { self: A =>
def bar = foo //compiles
}
val b = new B //fails
val b = new B with A //compiles
这意味着任何B
个实例都必须继承(混合)A
。 B
不是A
,但其实例承诺如此,因此您可以将B
编码为A
。