[英]Scala abstract class,what does self do?
我正在学习抽象类,此链接非常有用
abstract class Foo[T] { self:T =>
def bar1(f:T):Boolean
def bar2(f:T):T
}
class FooImpl extends Foo[FooImpl]{
override def bar1(f:FooImpl) = true
override def bar2(f:FooImpl) = f
}
self:T代表什么?据我了解,T是类参数。
正如@cchantep在他的评论中提到的, self : T
在这种情况下是一个自我类型注释,基本上说Foo[T]
的实例也需要表现为T
您可以在FooImpl
看到确实如此,如FooImpl <: Foo
。
您可以在此处 , 此处或此处找到有关自类型注释的更多信息。 请注意,在大多数情况下,您将如何在依赖注入和Cake Pattern的上下文中看到它。
换句话说,这样做的目的是什么:
trait A
trait B { this: A => }
当您可以这样做时:
trait A
trait B extends A
为什么要使用[这种语法]?
答案通常归结为“ B要求A”(注释)与“ B是A”(继承),并且前者更适合于依赖性管理。
最后,为了澄清起见,请注意根本不需要“ self
”一词。 这可能是任何有效的变量名,但self
或this
是大部分时间的约定。 也就是说,您可能正在做:
trait A
trait B { myVar: A => }
但这不太常见。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.