【问题标题】:No ClassTag available compilation error没有可用的 ClassTag 编译错误
【发布时间】:2014-01-29 22:33:14
【问题描述】:

编译器不断产生以下错误:

No ClassTag available for a
  val keys = Array.fill(maxSize+1){ default[a] }
                                  ^
not enough arguments for method fill: (implicit evidence$9: scala.reflect.ClassTag[a])Array[a].
Unspecified value parameter evidence$9.
  val keys = Array.fill(maxSize+1){ default[a] }
                                  ^

这段代码

object Utils {
  def default[a] = {
    class DefaultVal {
      var x: a = _
    }
    (new DefaultVal).x
  }
}

class IndexedHeap[a](maxSize: Int)(implicit ev: Ordering[a]) {
  import ev._
  import Utils._

  val keys = Array.fill(maxSize+1){ default[a] }

}

关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: scala


    【解决方案1】:

    我认为添加 ClassTag 可以解决问题,如下所示:

    [a:ClassTag]
    

    根据您对与隐式参数和上下文边界冲突的评论进行编辑: 更改隐式参数以包含 ClassTag 也

    implicit ev: Ordering[a], ct: ClassTag[a]
    

    【讨论】:

    • 如果我将它添加到类定义中,编译器会失败说Can't have both implicit parameters and context bounds
    • 没错,你应该把它作为一个隐式参数添加,比如隐式 ev: Ordering[a], ct: ClassTag[a]。
    猜你喜欢
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多