繁体   English   中英

Scala抽象类,自我做什么?

[英]Scala abstract class,what does self do?

我正在学习抽象类,此链接非常有用

Scala通用方法覆盖

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 ”一词。 这可能是任何有效的变量名,但selfthis是大部分时间的约定。 也就是说,您可能正在做:

trait A 
trait B { myVar: A => }

但这不太常见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM