相关疑难解决方法(0)

Scala的apply()方法魔法是如何工作的?

在Scala中,如果我定义一个apply在类或顶级对象中调用的方法,那么每当我将一个圆括号添加到该类的实例时,将调用该方法,并apply()在它们之间放置适当的参数.例如:

class Foo(x: Int) {
    def apply(y: Int) = {
        x*x + y*y
    }
}

val f = new Foo(3)
f(4)   // returns 25
Run Code Online (Sandbox Code Playgroud)

所以基本上,object(args)只是语法糖object.apply(args).

Scala如何进行此转换?

这里是否存在全局定义的隐式转换,类似于Predef对象中的隐式类型转换(但实物类型不同)?或者它是一些更深层次的魔法?我问,因为看起来Scala强烈赞成一套较小的规则的一致应用,而不是许多例外的许多规则.这最初对我来说似乎是个例外.

scala syntactic-sugar magic-methods companion-object

79
推荐指数
3
解决办法
3万
查看次数