摘抄两段话:
在明确了方法调用的接收者的情况下,若方法只有一个参数时,调用的时候就可以省略点及括号。
如 “0 to 2”,实际完整调用是 “0.to(2)”。但 “println(2)” 不能写成 “println 10“”,因为未写出方法调用的接收者 Console,所以可以写成 “Console println 10”
用括号传递给变量(对象)一个或多个参数时,Scala 会把它转换成对 apply 方法的调用;
与此相似的,当对带有括号并包括一到若干参数的进行赋值时,
编译器将使用对象的 update 方法对括号里的参数和等号右边的对象执行调用。
val a = new Array(1, 2 ,3) a(0) 实际上调用的是a.apply(0) 这也能解释为什么 Scala 数组取值不用中括号括下标的方式,因为它也是一次方法调用
举个例子:
class SomeClass { def apply(key: String): String = { println("apply method called, key is: " + key) "Hello World!" } } val anyObject = new SomeClass println(anyObject("key1"))
输出为:
apply method called, key is: key1
Hello World!
update方法:
greetStrings(0) = "Hello" 实际为:greetStrings.update(
0
,
"Hello"
)