Ответ 1
Как насчет вызова unapply().get()
в сопутствующем объекте?
case class Foo(foo:String, bar:Int)
val (str, in) = Foo.unapply(Foo("test", 123)).get()
Есть ли простой способ преобразования класса case в кортеж?
Я могу, конечно, легко написать шаблонный код, чтобы сделать это, но я имею в виду без шаблона.
То, что я на самом деле, - это способ легко сделать класс дела лексикографически упорядоченным. Я могу достичь цели для кортежей, импортируя scala.math.Ordering.Implicits._ и voila, у моих кортежей есть порядок, определенный для них. Но implitsits в scala.math.Ordering не работают для классов case вообще.
Как насчет вызова unapply().get()
в сопутствующем объекте?
case class Foo(foo:String, bar:Int)
val (str, in) = Foo.unapply(Foo("test", 123)).get()
Вы можете попробовать расширить признак ProductN
, для N = 1-22, который TupleN
продолжается. Это даст вам много семантики Tuple, например, методы _1
, _2
и т.д. В зависимости от вас, как вы используете ваши типы, этого может быть достаточно, не создавая фактический Tuple.
Прошел этот старый поток, пытаясь сделать то же самое. В конце концов я решил это решение:
case class Foo(foo: String, bar: Int)
val testFoo = Foo("a string", 1)
val (str, in) = testFoo match { case Foo(f, b) => (f, b) }