gpt4 book ai didi

scala - 我什么时候应该在scala中使用 "new"?

转载 作者:行者123 更新时间:2023-12-01 22:48:23 27 4
gpt4 key购买 nike

当我使用ArrayBuffer时,我应该使用:

val arr = new ArrayBuffer[Int]

但是当我使用Map时,我应该使用:

val map = Map[Int, Int]()

最佳答案

要理解为什么需要使用 Map[T, T](...) 而不是 new Map[T, T](...),您需要了解伴生对象上的 apply 方法如何工作。

伴生对象是与类同名的对象。该对象通常包含工厂方法和其他您需要创建(轻松)类的对象的方法。

为了确保不必编写大量冗长的代码,Scala 使用了 apply 方法,当您像调用函数一样调用对象时,该方法会直接执行。

因此,Map 的伴生对象必须如下所示:

object Map {
def apply[K, V](...) = new Map[K,V](...) // Or something like this
}

虽然类(class)类似于

protected class Map[K, V](...) {
...
}

现在调用 Map[String, String](...) 您实际上是在调用 Map 伴随对象的 apply 方法。

但这里的

ArrayBuffer 没有伴生对象。因此,您需要直接使用构造函数自己创建该类的新实例。

关于scala - 我什么时候应该在scala中使用 "new"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29097807/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com