我创建了以下功能:
def mapToPers(inTuple: (String, String, String),
v: ((Double, Double, Double, Double, Double),
Map[Double,
(Double, Double, Double, Double, Double)])) = {
val (prod: String, market: String, week: String) = inTuple
val result = for (cumePeriod <- cumePeriods) yield {
val (per, weekList) = cumePeriod
if (weekList.contains(week)) ((prod, market, per), v)
}
result
}
当我调用它时,它会出现类型不匹配的错误:
描述资源路径位置类型不匹配;发现: ((String,String,String),((Double,Double,Double,Double,Double), 地图[Double,(Double,Double,Double,Double,Double)]))=&gt; scala.collection.immutable.Iterable [Any] required:(((String,String,String),((Double,Double,Double,Double,Double), 地图[Double,(Double,Double,Double,Double,Double)])))=&gt; 的 TraversableOnce [?]
答案 0 :(得分:3)
你明显有嵌套元组的问题。检查括号:
发现:
(
(String, String, String),
(
(Double, Double, Double, Double, Double),
Map[Double,(Double, Double, Double, Double, Double)]
)
) => scala.collection.immutable.Iterable[Any]
要求:
(
(
(String, String, String),
(
(Double, Double, Double, Double, Double),
Map[Double,(Double, Double, Double, Double, Double)]
)
)
) => TraversableOnce[?]
所以我看到了一个更高级别的嵌套。鉴于非常混乱的类型很难发现,我建议你在这里使用一些案例类。
编辑:BTW,我发现了别的东西。您正在使用的if
没有其他内容,因此for comprehension将不知道要准确收益。您可能只想在检查后才能收益:
val result = for {
(per, week_list) <- cumePeriods
if week_list.contains(week)
}
yield ((prod, market, per), v)