一些 Scala API 别名this to self, 例如,
trait Function1[-T1, +R] extends AnyRef { self =>
我知道该怎样this别名通常有效,但没有看到像 Function1 这样的特征如何从中受益。函数1不使用self除了最初提到的之外,它的定义中的任何地方都可以,那么它的目的是什么?
之前已经问过这个问题的变体,但答案并不直接适用。答案已经讨论了自我类型和内部类,但我不知道这如何适用于这里。
See https://github.com/scala/scala/blob/2.10.1/src/library/scala/Function1.scala#L8 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 https://github.com/scala/scala/blob/2.10.1/src/library/scala/Function5.scala#L26正在使用:
self.apply(x1, x2, x3, x4, x5)).curried
所以我怀疑它更容易self =>
始终包含在生成器模板中。
这里是commit https://github.com/scala/scala/commit/072455265526c994fb39221624209a3180b41837#src/library/scala/Function1.scala这会添加自我引用。提交消息实际上解释了为什么它对 n >= 5 执行不同的操作,我引用:
FunctionN,其中 N > 4,静态创建的类要少得多
动态创建更多对象的费用(这似乎是合理的
考虑到此类功能可能很常见)。这也允许
在 FunctionN 中柯里化 N > 8,而不会遇到文件名长度
限制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)