是否可以将特征的上下文更改为声明为其类型参数的类型?

aef*_*aef 1 scala traits

我想要完成的是类似的事情:

class Foo( val bar: String = "Hello!" ) extends MyTrait[ Foo ]

trait MyTrait[ T ] { self : T =>
 T.bar
}
Run Code Online (Sandbox Code Playgroud)

改变自我:T to self:Foo显然有效,但是MyTrait可能扩展另一个也有bar的类,所以self:Foo是不可接受的.

我可能会犯这个错误,有什么想法吗?

4e6*_*4e6 6

我认为,结构类型是你需要的:

trait MyTrait {
  self: { val bar: String } =>
 def showBar = bar
}

class Foo(val bar: String) extends MyTrait
Run Code Online (Sandbox Code Playgroud)