22

のようなネストされたタプル構造が(String,(String,Double))あり、それを に変換したいと考えてい(String,String,Double)ます。さまざまな種類のネストされたタプルがあり、それぞれを手動で変換したくありません。それを行う便利な方法はありますか?

4

5 に答える 5

24

shapelessを使用する場合、これはまさに必要なものだと思います。

于 2012-12-04T09:19:09.257 に答える
9

タプルにはフラット化はありません。しかし、構造を知っている場合は、次のようなことができます。

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はどのタイプでもフラットになります。暗黙のキーワードを定義に追加することもできます。これは3つの要素に対してのみ機能します。次のようにTuppleをフラット化できます。

(1, ("hello", 42.0))   => (1, "hello", 42.0)
(("test", 3.7f), "hi") => ("test", 3.7f, "hi")

戻り型には3つの要素しかないため、複数のネストされたTuppleを地面に平坦化することはできません。

((1, (2, 3)),4)        => (1, (2, 3), 4)
于 2012-12-04T09:17:27.040 に答える