Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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不匹配_Scala_Types_Compiler Errors_Type Inference - Fatal编程技术网

映射映射时Scala不匹配

映射映射时Scala不匹配,scala,types,compiler-errors,type-inference,Scala,Types,Compiler Errors,Type Inference,我正在用Scala(2.9.1)进行我的第一个有趣的步骤(非hello world级别),我一直试图理解一个非常没有信息的错误消息。 事情是这样的: error: type mismatch; found : (Int, Array[InputEntry]) => (Int, Double) required: (Int, Array[InputEntry]) => ? entries.groupBy(grouper).map((k: Int, ies: Array[InputE

我正在用Scala(2.9.1)进行我的第一个有趣的步骤(非hello world级别),我一直试图理解一个非常没有信息的错误消息。 事情是这样的:

error: type mismatch;
found   : (Int, Array[InputEntry]) => (Int, Double)
required: (Int, Array[InputEntry]) => ?
entries.groupBy(grouper).map((k: Int, ies: Array[InputEntry]) => (k, doMyStuff(ies)))
正如您所猜测的,这个代码段中的进程应该是一些处理的地方,它实际上是一个定义良好的函数,具有签名
Array[inpuntery]=>Double

而Grouper的签名是
Array[inpuntery]=>Int

我试图提取一个函数并替换lambda,但没有用,我一直在试图理解错误中的问号

有什么想法吗


编辑:我应该澄清inpuntery是我定义的一个类,但是对于这个例子,它似乎与我无关。

这看起来像是问题:

.map((k: Int, ies: Array[InputEntry]) => (k, doMyStuff(ies)))
您需要使用case语句取消应用参数并将其分配给局部变量。您还需要使用{}而不是(),因为它现在是一个匿名函数

entries.groupBy(grouper).map{case (k, ies) => (k, doMyStuff(ies))}
这里有一个更简单的例子

scala> val x = List(("a",1),("b",2))
x: List[(java.lang.String, Int)] = List((a,1), (b,2))
scala> x.map{ case (str, num) => num }
res5: List[Int] = List(1, 2)
如果不想使用case语句,则必须将tuple作为单个变量

scala> x.map(tuple => tuple._2)
res6: List[Int] = List(1, 2)

我们需要看一些代码。打印错误消息的代码部分不够。特别是,
doMyStuff
的类型签名是什么,以及您试图将结果写入哪种类型的变量?您确定错误消息没有说
required:((Int,List[inpuntery])=>?
我想我应该更具体地说,条目是一个映射。无论如何谢谢哇,我错了:他报错了错误消息。一旦你解释了这一点,我实际上应该给一个+1。相应的错误被标记为已修复,因此它不应该出现在下一个版本中:@KenBloom:请阅读我的评论,我实际上复制粘贴了错误消息。无论如何,谢谢大家:)+1:就像使用case来解构args一样。优于
val(k:Int,ies:Array[inpuntery])=tuple