scala - 在Scala中使用self别名=>

标签 scala this alias self

某些Scala API将其自身别名为自己,例如,

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

我知道这种别名通常是如何工作的,但是看不到诸如Function1之类的特征如何从中受益。除了最初提到的,Function1在其定义中没有在任何地方使用self,所以这里的目的是什么?

之前已经问过这个问题的各种形式,但是答案并不直接适用。答案已经讨论了自我类型和内部类,但是我在这里看不到如何应用。

最佳答案

看到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.

该代码由Function0的同一生成器为Function22生成。某种程度上讲到Function5时,您开始看到正在使用 self :
self.apply(x1, x2, x3, x4, x5)).curried

因此,我怀疑将self =>始终包含在生成器模板中会更容易。

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

FunctionN, where N > 4, many fewer classes are created statically at the expense of creating more objects dynamically (which seems reasonable given how common such functions are likely to be). This also allows for curry in FunctionN for N > 8 without running into the filename length restriction.

关于scala - 在Scala中使用self别名=>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16246531/

相关文章:

java - Android Studio 的 .alias 文件类型?

Scala:带有日志记录的链选项

scala - 高阶ScalaCheck

使用两个列表的 Scala 排列

测试并发/并行执行

javascript - 当从函数内部调用回调时,为什么(如何) 'this' 的值会发生变化?

java - 使用 'this' 作为构造函数中方法调用的参数

java - hibernate :标准。向标准对象添加别名

javascript - React.js 如何将索引作为 prop 从 this.props 数组传递给子组件

linux - 如果 bash 别名不能接受参数,为什么这些别名可以工作?