【发布时间】:2009-08-03 18:18:53
【问题描述】:
在 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 似乎强烈倾向于一致地应用一组较小的规则,而不是包含许多例外的许多规则。这最初对我来说似乎是个例外。
【问题讨论】:
标签: scala syntactic-sugar magic-methods companion-object