首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >火花中的Scala型MisMatch误差

火花中的Scala型MisMatch误差
EN

Stack Overflow用户
提问于 2015-11-02 16:02:42
回答 1查看 559关注 0票数 0

我创建了以下函数:

代码语言:javascript
复制
 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
}

当我调用它时,它会产生类型不匹配的错误:

资源路径类型类型不匹配;发现:((字符串,字符串,字符串),((双,双),scala.collection.immutable.IterableAny,(双,双) => MapDouble:(字符串,字符串,字符串),((双,双),MapDouble,(双,双) => =>

EN

回答 1

Stack Overflow用户

发布于 2015-11-02 17:14:43

显然,嵌套元组存在问题。检查括号:

发现:

代码语言:javascript
复制
(
  (String, String, String), 
  (
    (Double, Double, Double, Double, Double), 
    Map[Double,(Double, Double, Double, Double, Double)]
  )
) => scala.collection.immutable.Iterable[Any] 

所需:

代码语言:javascript
复制
(
  (
    (String, String, String), 
    (
      (Double, Double, Double, Double, Double), 
      Map[Double,(Double, Double, Double, Double, Double)]
    )
  )
) => TraversableOnce[?]

所以我又看到一个层次的筑巢。考虑到非常令人困惑的类型,很难发现,我建议您在这里使用一些案例类。

编辑:顺便说一下,我发现了别的东西。您正在使用的if没有其他的,因此,对于理解的理解将不知道产生确切的结果。您可能只想在检查之后才放弃:

代码语言:javascript
复制
val result = for { 
  (per, week_list) <- cumePeriods
  if week_list.contains(week)
}
  yield ((prod, market, per), v)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33481814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档