Scala 什么是;外部=>&引用;真的吗?

Scala 什么是;外部=>&引用;真的吗?,scala,Scala,是否有关于“outer=>”功能的文档?它看起来像是带有推断类型的自类型注释。但是我觉得我错了 如果是这样的话,这只是表示访问super的另一种方式吗 trait A extends (B => C) { outer => def apply(x: B): C = outer(x) } 这是另一种访问此的方式。当外部this将被内部类中的另一个this隐藏时,它非常有用。这样,您只需为外部this提供一个附加名称(原始this在作用域中时仍然可用,因此它不是重命名)即可。不

是否有关于“outer=>”功能的文档?它看起来像是带有推断类型的自类型注释。但是我觉得我错了

如果是这样的话,这只是表示访问
super
的另一种方式吗

trait A extends (B => C) {
  outer =>
  def apply(x: B): C = outer(x)
}

这是另一种访问此的方式。当外部
this
将被内部类中的另一个
this
隐藏时,它非常有用。这样,您只需为外部
this
提供一个附加名称(原始
this
在作用域中时仍然可用,因此它不是重命名)即可。

不是
超级
,而是外部作用域。这是一种对不同范围使用别名的方法。例如:

class A(val x:Int) { thisA =>
 class B { 
   val x = 2 
   val y = x + thisA.x // without thisA how could we use A.x instead of B.x ? (*)
 }
}
有一个更好的例子


(*)还有另一种方法可以达到同样的效果,但这超出了这个问题。

谢谢你的回答。在给定的示例中,如何扩展外部范围?外部(x)是(B=>C)的应用方法吗?或者是“这个”范围,即特质A的应用方法?或者如果我用A做新的D,它会是D的应用吗?在这两种情况下,你的例子和新的D扩展了A,outer()将是A的outer.apply()。对于像我这样好奇的人来说,“另一种方式”是A.this.x。@dave,你是对的。现在,如果B中还有另一个A类呢?:)