Ответ 1
Если вы используете shapeless, this именно то, что вам нужно, я думаю.
У меня есть структура вложенных кортежей вроде (String,(String,Double))
, и я хочу преобразовать ее в (String,String,Double)
. У меня разные типы вложенных кортежей, и я не хочу преобразовывать их вручную. Есть ли удобный способ сделать это?
Если вы используете shapeless, this именно то, что вам нужно, я думаю.
На Tupple нет сглаживания. Но если вы знаете структуру, вы можете сделать что-то вроде этого:
implicit def flatten1[A, B, C](t: ((A, B), C)): (A, B, C) = (t._1._1, t._1._2, t._2)
implicit def flatten2[A, B, C](t: (A, (B, C))): (A, B, C) = (t._1, t._2._1, t._2._2)
Это сгладит Tupple с любыми типами. Вы также можете добавить неявное ключевое слово в определение. Это работает только для трех элементов. Вы можете сгладить Tupple как:
(1, ("hello", 42.0)) => (1, "hello", 42.0)
(("test", 3.7f), "hi") => ("test", 3.7f, "hi")
Несколько вложенных Tupple не могут быть сплющены к основанию, потому что в возвращаемом типе есть только три элемента:
((1, (2, 3)),4) => (1, (2, 3), 4)