【问题标题】:Scala: Implementing a generic foldScala:实现通用折叠
【发布时间】:2017-06-01 16:46:15
【问题描述】:

我不明白为什么这个折叠不能编译。谁能给我一个线索?

sealed trait ListG[A] {

  def fold[A,B](end: B, f: (A,B) => B): B = this match {
    case End() => end
    case Cons(hd,tl) => f(hd, tl.fold(end,f))
  }
}

错误:(20, 28) 类型不匹配; 找到:hd.type(具有基础类型 A) 要求:一个 case Cons(hd,tl) => f(hd, tl.fold(end,f)) ^ 最终案例类 EndA 扩展 ListG[A] 最终案例类 Cons[A](hd:A, tl:ListG[A]) 扩展 ListG[A]

【问题讨论】:

  • 把错误信息和代码一起贴出来

标签: scala


【解决方案1】:

当您在 fold 函数上定义附加类型参数 A 时,您将隐藏类型参数 AListG

【讨论】:

    【解决方案2】:

    添加类型归属似乎可以解决问题。

    case Cons(hd:A, tl) => ...
                ^^
    

    有一个关于类型擦除的警告,但它确实可以编译并且似乎可以运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 2011-05-03
      • 1970-01-01
      相关资源
      最近更新 更多