Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 无形状:元组上的flatMap无法编译_Scala_Shapeless - Fatal编程技术网

Scala 无形状:元组上的flatMap无法编译

Scala 无形状:元组上的flatMap无法编译,scala,shapeless,Scala,Shapeless,使用shapeless和教程中的示例: 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.tu

使用shapeless和教程中的示例:

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
期望它的函数参数在应用于其左侧的每个元素时产生一个元组(具有某种算术或其他形式)<代码>标识应用于
(1,“a”)
时生成元组,但应用于
'c'
时不生成元组。。。在后一种情况下,它产生一个
字符
。你真正想要的是

scala> ((1, "a"), Tuple1('c')) flatMap identity
res0: (Int, String, Char) = (1,a,c)
无可否认,这并不像它应该的那么漂亮,因为Scala没有
Tuple1
的语法

或者,如果您希望向元组添加一个值,将元组的arity增加一,最简单的选项是使用
:+

scala> (1, "a") :+ 'c'
res0: (Int, String, Char) = (1,a,c)

这可能值得作为一个例子添加到功能概述中,因为这是最常见的展平场景之一。我已经用一种更简单的方法更新了答案,将单个值附加到元组中。。。这就是你的想法吗?我在烫伤中的常见用例是必须压平像((a,b),c)这样的东西,我通常会天真地{case((a,b,c)=>(a,b,c)}。我正在尝试使用.flatte方法。按您想要的方式运行的展平操作当然是可能的,但它与flatMap标识不同。参见示例。