为什么在Scala中使用Tuple over Set?

Ale*_*eco 4 scala tuples set difference

两者都可以存储混合类型,但是Set似乎更强大,因为它具有union,intersection或diff等.

另一个重要的区别是元组不被视为集合.

我正在学习Scala,我想知道为什么我要使用元组而不是集合.

jwv*_*wvh 7

元组的主要优点是保持类型信息.对于像Scala这样的静态类型语言来说,这是一个大问题.

scala> (4.2,'c',true,"blah",7)
res2: (Double, Char, Boolean, String, Int) = (4.2,c,true,blah,7)

scala> Set(4.2,'c',true,"blah",7)
<console>:11: warning: a type was inferred to be `Any`; this may indicate a programming error.
       Set(4.2,'c',true,"blah",7)
           ^
res3: scala.collection.immutable.Set[Any] = Set(true, blah, 7, c, 4.2)
Run Code Online (Sandbox Code Playgroud)

一旦我们的Set类型是,Set[Any]那么我们丢失了类型信息,这可能有助于避免问题(即错误).

此外,从a拉动元素Set[Any]可能是一种痛苦.从中提取的每个元素[例如mySet.head]可能必须在可以使用之前进行类型测试.从元组中获取单个元素也可能相当麻烦[ myTup._3]但编译器和代码的其余部分确切地知道它正在获得什么.