如何在Scala的数组中存储不同类型的输入?

时间:2018-10-03 14:21:37

标签: scala generics scala-collections

我对Scala还是很陌生,并试图了解如何在集合中存储不同类型的值。

例如,假设我具有对应类型的以下值:

12-Int
4.0-Float
“是学习和练习编码的最佳场所!” -String

我如何存储所有三个输入并对每个输入执行不同的逻辑?

2 个答案:

答案 0 :(得分:6)

答案不正确:Seq[Any]。这是任何类型的序列,因此您没有有关成员的信息,因此需要再次进行(可能不安全)强制转换或(可能不详尽)模式匹配。

有一个更好的答案:HList是Sha​​peless库提供的一个异构列表。这将捕获有关每个成员的类型信息。请参见示例here

有一个最佳答案:仔细考虑您是否完全需要它。 case class在大多数情况下会更惯用。

答案 1 :(得分:1)

scala> Array(12, 4.0f, "Hello")
res1: Array[Any] = Array(12, 4.0, Hello)

scala> res1.foreach{ case i: Int => println("Integer"); case f: Float => println("Float"); case s: String => println("String")}
Integer
Float
String

但是-您可能应该听@erip的建议