Подтвердить что ты не робот

В Scala существует ли простой способ преобразования класса case в кортеж?

Есть ли простой способ преобразования класса case в кортеж?

Я могу, конечно, легко написать шаблонный код, чтобы сделать это, но я имею в виду без шаблона.

То, что я на самом деле, - это способ легко сделать класс дела лексикографически упорядоченным. Я могу достичь цели для кортежей, импортируя scala.math.Ordering.Implicits._ и voila, у моих кортежей есть порядок, определенный для них. Но implitsits в scala.math.Ordering не работают для классов case вообще.

4b9b3361

Ответ 1

Как насчет вызова unapply().get() в сопутствующем объекте?

case class Foo(foo:String, bar:Int)

val (str, in) =  Foo.unapply(Foo("test", 123)).get()

Ответ 2

Вы можете попробовать расширить признак ProductN, для N = 1-22, который TupleN продолжается. Это даст вам много семантики Tuple, например, методы _1, _2 и т.д. В зависимости от вас, как вы используете ваши типы, этого может быть достаточно, не создавая фактический Tuple.

Ответ 3

Прошел этот старый поток, пытаясь сделать то же самое. В конце концов я решил это решение:

case class Foo(foo: String, bar: Int)

val testFoo = Foo("a string", 1)

val (str, in) = testFoo match { case Foo(f, b) => (f, b) }