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