在 Scala 中,如果我定义一个名为apply
在类或顶级对象中,每当我将一对括号附加到该类的实例,并为apply()
在他们之间。例如:
class Foo(x: Int) {
def apply(y: Int) = {
x*x + y*y
}
}
val f = new Foo(3)
f(4) // returns 25
所以基本上,object(args)
只是语法糖object.apply(args)
.
Scala 是如何进行这种转换的呢?
这里是否存在全局定义的隐式转换,类似于 Predef 对象中的隐式类型转换(但种类不同)?或者是某种更深层次的魔法?我问这个问题是因为 Scala 似乎强烈支持一致应用较小的一组规则,而不是带有许多例外的许多规则。最初这对我来说似乎是一个例外。
我不认为有比你最初所说的更深入的事情:它只是编译器转换的语法糖f(a)
into f.apply(a)
作为特殊的语法情况。
这可能看起来像是一个特定的规则,但只有其中的一小部分(例如,update
)允许DSL类似的结构和库。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)