自我:T =>和这个:T =>在定义特征时有相同的含义吗?

huy*_*hjl 11 scala traits

似乎我可以使用selfthis引用混合实例,或者更确切地说是限制混合实例.例如,那些是等价的吗?

scala> trait A { self: List[_] => }
defined trait A

scala> trait B { this: List[_] => }
defined trait B
Run Code Online (Sandbox Code Playgroud)

这只是一个约定,还是使用不同的东西而不是this提供一些好处?

Mil*_*bin 18

在具有引用封闭实例的成员类型的情况下,使用"this"以外的名称会很有用.例如,

trait Outer { self =>
  trait Inner {
    def outer = self
  }
}
Run Code Online (Sandbox Code Playgroud)

比较好,

trait Outer {
  trait Inner {
    def outer = Outer.this
  }
}
Run Code Online (Sandbox Code Playgroud)

在某些情况下.


Mit*_*ins 6

它可以是任何东西:self,this,meep,blah等.它仅由编译器用于确定要转换到哪个类(当调用其上的方法时)并且实际上不显示在字节码中.

命名时要小心,因为本地标识符会覆盖自我类型定义:

trait A {
  def baz = println("baz!")
}
trait B {
  foo: A => 
  val foo = "hello"   
  // def bar = foo.baz // does not compile because foo is String, not A
  def bar = foo.substring(1)
}
Run Code Online (Sandbox Code Playgroud)