使用self =>在scala中对此进行别名

时间:2013-04-26 23:14:23

标签: scala this alias self

某些Scala API将别名为 self ,例如,

trait Function1[-T1, +R] extends AnyRef { self =>

我知道这个别名是如何工作的,但是不知道如Function1这样的特性是如何从中受益的。除了最初的提及,Function1在其定义中的任何地方都不使用 self ,那么它的用途是什么?

之前已经询问过这个问题的变体,但答案并不直接适用。答案已经讨论了自我类型和内部类别,但我不知道这在哪里适用。

1 个答案:

答案 0 :(得分:10)

请参阅https://github.com/scala/scala/blob/2.10.1/src/library/scala/Function1.scala#L8所在的位置

 // GENERATED CODE: DO NOT EDIT. See scala.Function0 for timestamp.

代码由Function0Function22的相同生成器生成。不知怎的,当它转到Function5时,你开始看到self被使用:

self.apply(x1, x2, x3, x4, x5)).curried

所以我怀疑让self =>总是包含在生成器模板中会更容易。

以下是添加自引用的commit。提交消息实际上解释了为什么它为n> = 5做了不同的事情,我引用:

  

功能N,其中N> 4,静态创建的类很少   动态创建更多对象的费用(这似乎是合理的   鉴于这些功能可能是多么常见)。这也允许   功能N中的咖喱用于N> 8没有进入文件名长度   限制。