Как хранить различные типы ввода в массиве в Scala? - PullRequest
0 голосов
/ 03 октября 2018

Я очень новичок в Scala и пытался понять, как мы можем хранить значения различных типов в коллекции.

Например, предполагая, что у меня есть следующие значения с соответствующими типами:

12 - Int
4.0 - Float
"это лучшее место для изучения и практики кодирования!"- String

Как сохранить все три входа и выполнить различную логику для каждого из них?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Неверный ответ: Seq[Any].Это последовательность любого типа, поэтому у вас нет информации о членах, и вам нужно будет выполнить (потенциально небезопасный) приведение или (возможно, не исчерпывающий) шаблон, чтобы сопоставить их снова.

ответ: HList, который представляет собой гетерогенный список, предлагаемый библиотекой Shapeless.Это захватывает информацию о типе каждого члена.Смотрите пример здесь .

Лучший ответ: внимательно подумайте, нужно ли вам это вообще.case class es будут иметь тенденцию быть более идиоматическими большую часть времени .

0 голосов
/ 03 октября 2018
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

...