在 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 似乎强烈倾向于一致地应用一组较小的规则,而不是包含许多例外的许多规则。这最初对我来说似乎是一个例外。