Scala应用方法

时间:2012-03-17 04:48:17

标签: scala syntax apply

如果List(1,2,3)转换为List.apply(1,2,3),那么为什么new Array[String](3)不会转换为新的数组[String] .apply(3)?

我尝试过Array.apply(3),但语义与new Array[String](3)不同。

3 个答案:

答案 0 :(得分:3)

当您调用new Array[String](3)时,您使用单个参数调用Array class上的Array构造函数:3。或者,当您调用Array(3)时,您正在调用Array.apply(3)上的apply方法{3}}。在Java中,这称为静态方法调用。它与调用{{1}}一样,正如您所期望的那样。

答案 1 :(得分:2)

使用new意味着该机制不是函数应用程序,而是构造。代码“转换”为分配内存并调用构造函数。

答案 2 :(得分:1)

注意

之间的区别
val a = new Array(3)

val a = Array(3)

第一个创建一个包含3个Array元素的新null对象;第二个创建一个新的Array对象,其中包含一个元素,即3。

Array(3)转换为Array.apply(3),与List(3)转换为List.apply(3)的方式完全相同。