Scala - 将数据封装在对象中

时间:2014-09-27 14:47:30

标签: scala

动机

这个问题是关于使用Scala中的数据列表,以及使用元组或类对象来保存数据。也许我的一些假设是错误的,所以就这样了。

我目前的做法

根据我的理解,元组不能提供超出提供的._1._2等优雅地解决其元素的可能性。我可以使用它们,但是无论数据是什么,代码都会有点不愉快提取远远超出了定义它的代码行。

另外,据我所知,Scala Map只能对其值使用单一类型声明,因此除了类型继承的情况之外,它不能使其值的值类型多样化。 (到后一点,考虑使用Map值的类型层次结构"多样性" - 除非类层次结构适合任何"模型"直觉,否则可能看起来非常人为开始)。

因此,当我需要列表,其中每个元素包含两个或多个命名数据实体,例如如下面的String类型和List类型之一,每个都可以通过可理解的名称访问,我诉诸于:

case class Foo (name1: String, name2: List[String]) 
val foos: List[Foo] = ...

然后我可以使用.name1.name2来访问列表的实例。

我在这里看到的缺点和问题

当列表非常大时,我应该假设这比使用元组作为列表类型的性能更低或消耗更多内存吗?或者,在Scala中是否有一种不同的优雅方式来完成结构语义?

1 个答案:

答案 0 :(得分:2)

就性能而言,我认为元组和案例类的实例之间不会有任何区别。实际上,元组is an instance of a case class

其次,如果您正在寻找另一种更易读的方法来从元组中获取数据,我建议您考虑模式匹配:

val (name1, name2) = ("first", List("second", "third"))