我使用Set
函数运行scala repl创建简单值,并尝试找出创建Set的风格。
$ scala
Welcome to Scala version 2.10.3-20130923-000000-e2fec6b28d (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_51).
Type in expressions to have them evaluated.
Type :help for more information.
scala> val s = Set(0,3,1)
s: scala.collection.immutable.Set[Int] = Set(0, 3, 1)
scala> :type s
scala.collection.immutable.Set[Int]
scala> s.getClass
res0: Class[_ <: scala.collection.immutable.Set[Int]] = class scala.collection.immutable.Set$Set3
这确实让我清楚。我为Set读了scaladoc,发现Set
是一个通用特征,可能有不同的具体实现。
那么这次在REPL中使用了set trait的实现是什么?如何在不深入scala源代码和执行其他复杂任务的情况下解决这个问题?如果搜索类型只需要REPL本身,那将是完美的。
我从无到有地感到困惑。 Set3是一个有效的类名,而不是一种垃圾。所以,确定类的正确方法:
scala> val s = Range(0,1000).toSet
scala> s.getClass
res0: Class[_ <: scala.collection.immutable.Set[Int]] = class scala.collection.immutable.HashSet$HashTrieSet
应该关闭答案