使用无形和教程中的示例:
import shapeless._
import syntax.std.tuple._
import poly._
object ShapelessPlay extends App{
val t = ((1,"a"),'c')
println(t flatMap identity)
}
我收到以下错误:
could not find implicit value for parameter mapper: shapeless.ops.tuple.FlatMapper[((Int, String), Char),shapeless.poly.identity.type]
println(t flatMap identity)
我错过了什么? ^
答案 0 :(得分:5)
它失败是因为flatMap
在应用于其左侧的每个元素时期望其函数参数产生元组(某些元素或其他元素)。 identity
会在应用于(1, "a")
时生成元组,但在应用于'c'
时则不会生成元组...在后一种情况下会生成Char
。你真正想要的是,
scala> ((1, "a"), Tuple1('c')) flatMap identity
res0: (Int, String, Char) = (1,a,c)
由于Scala没有Tuple1
的语法,因此它确实不应该如此漂亮。
或者,您只需要将值附加到元组,将后者的元素增加一,最简单的选项是使用:+
,
scala> (1, "a") :+ 'c'
res0: (Int, String, Char) = (1,a,c)