'this:=>'是什么构造意味着?

时间:2014-10-15 01:37:20

标签: scala

我在Scala库中看到过这样的几个时间代码。这是什么意思?

trait SecuredSettings {
  this: GlobalSettings =>

  def someMethod = {}
   ...
}

2 个答案:

答案 0 :(得分:2)

这个技巧被称为"自我类型注释"。

这实际上是同时做两件事:

  1. 介绍this引用的本地别名(在引入嵌套类时可能很有用,因为那时你在范围内有几个this个对象。)
  2. 强制给定trait只能混合到某种类型的子类型中(这样你可以假设你在范围内有一些方法)。
  3. 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个实例都必须继承(混合)AB不是A,但其实例承诺如此,因此您可以将B编码为A