Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么scala中不存在类集?_Scala_Collections - Fatal编程技术网

为什么scala中不存在类集?

为什么scala中不存在类集?,scala,collections,Scala,Collections,有许多类继承特征集。 哈希集、树集等 还有对象(我能称之为特征集的伴生对象吗?不是在类集的情况下?)集和特征集 在我看来,只需在这个列表中添加一个类“Set”,就可以很容易地理解这个结构 类集合不存在有什么原因吗?在Scala中,类和特征之间没有重叠。类是可以实例化的实现,而trait是独立的可混合接口。Set.apply的使用提供了一个具有接口Set的对象,这就是使用它所需要知道的全部内容。我完全理解想要一个具体的类型,但那是没有必要的。这里正确的做法是将其保存到Set类型的val,并仅使用S

有许多类继承特征集。 哈希集、树集等

还有对象(我能称之为特征集的伴生对象吗?不是在类集的情况下?)集和特征集

在我看来,只需在这个列表中添加一个类“Set”,就可以很容易地理解这个结构


类集合不存在有什么原因吗?

在Scala中,类和特征之间没有重叠。类是可以实例化的实现,而trait是独立的可混合接口。Set.apply的使用提供了一个具有接口Set的对象,这就是使用它所需要知道的全部内容。我完全理解想要一个具体的类型,但那是没有必要的。这里正确的做法是将其保存到Set类型的val,并仅使用Set提供的接口


我知道这可能不令人满意,但给它时间,Scala类型的系统本身就会有意义,即使这与Java不同。

在Scala中,类和特征之间没有重叠。类是可以实例化的实现,而trait是独立的可混合接口。Set.apply的使用提供了一个具有接口Set的对象,这就是使用它所需要知道的全部内容。我完全理解想要一个具体的类型,但那是没有必要的。这里正确的做法是将其保存到Set类型的val,并仅使用Set提供的接口


我知道这可能不令人满意,但给它时间,Scala类型的系统本身就会有意义,即使这与Java不同。

如果您只需要一个集合,请使用
集合。应用
您将拥有一个支持所有重要操作的有效集合。您不必担心它是如何实现的。它已准备好在大多数用例中正常工作

另一方面,如果某些操作的性能对您很重要,那么为set的具体实现创建一个具体的类,您将确切地知道您拥有什么

在java中,您可以编写:

Set<String> strings = new HashSet<>(Arrays.asList("a", "b"));
但是,如果您不需要担心类型,只需使用

val strings = Set("a", "b")
这并没有什么问题,我不认为添加另一个类会有什么帮助。有一个接口/特性和具体的实现是正常的,中间没有需要,也没有帮助。

Set.apply
是集合的工厂。您可以使用
getClass
检查结果对象的实际类。例如,该工厂为尺寸为0-4的产品创建了特殊的优化套件

scala.collection.immutable.Set$EmptySet$
scala.collection.immutable.Set$Set1
scala.collection.immutable.Set$Set2

对于较大的集合,它是一个散列集合,即
scala.collection.immutable.HashSet$HashTrieSet
如果您只需要一个集合,请使用
set.apply
,您将拥有一个支持所有重要操作的有效集合。您不必担心它是如何实现的。它已准备好在大多数用例中正常工作

另一方面,如果某些操作的性能对您很重要,那么为set的具体实现创建一个具体的类,您将确切地知道您拥有什么

在java中,您可以编写:

Set<String> strings = new HashSet<>(Arrays.asList("a", "b"));
但是,如果您不需要担心类型,只需使用

val strings = Set("a", "b")
这并没有什么问题,我不认为添加另一个类会有什么帮助。有一个接口/特性和具体的实现是正常的,中间没有需要,也没有帮助。

Set.apply
是集合的工厂。您可以使用
getClass
检查结果对象的实际类。例如,该工厂为尺寸为0-4的产品创建了特殊的优化套件

scala.collection.immutable.Set$EmptySet$
scala.collection.immutable.Set$Set1
scala.collection.immutable.Set$Set2

对于较大的集合,它是一个散列集合,即
scala.collection.immutable.HashSet$HashTrieSet

我看不出您缺少什么。你用这门课做什么?你会把它放在“结构”中的什么位置?我认为Object Set.apply的结果类型是不明确的。apply的结果有类型特征集,scala解释器说它有类型特征集,但它真正有什么类呢?我知道scala Trait和java接口完全不同,但我不认为Trait本身可以是一个类,我错了吗?Trait和java接口很相似。。。只是它们更通用。我看不出你缺少什么。你用这门课做什么?你会把它放在“结构”中的什么位置?我认为Object Set.apply的结果类型是不明确的。apply的结果有类型特征集,scala解释器说它有类型特征集,但它真正有什么类呢?我知道scala Trait和java接口完全不同,但我不认为Trait本身可以是一个类,我错了吗?Trait和java接口很相似。。。只是他们更多才多艺。