【问题标题】:Scala type mismatch on default parameter type默认参数类型上的 Scala 类型不匹配
【发布时间】:2017-03-07 17:34:22
【问题描述】:

我定义了一个 Scalatest 助手来比较两个鞍框架,如下所示:

def compareFrames[RX, CX](result: Frame[RX, CX, Double], expected: Frame[_, _, Double], tol: Double = 1e-10): Unit = {
   // TODO: implement
   ???
}

但现在我想添加一组列索引元素,我想跳过这些元素进行测试,例如Matlab 显然有一个不同的公式来计算偏度而不是鞍...注意 Set 元素类型必须与 Frame 列索引类型相同:

def compareFrames[RX, CX](result: Frame[RX, CX, Double], expected: Frame[_, _, Double], toSkip: Set[CX] = Set(), tol: Double = 1e-10): Unit = {
   // TODO: implement
   ???
}

但是在没有指定默认参数的情况下调用函数时会导致以下编译器错误:

Error:(53, 7) type mismatch;
 found   : scala.collection.immutable.Set[Nothing]
 required: Set[String]
Note: Nothing <: String, but trait Set is invariant in type A.
You may wish to investigate a wildcard type such as `_ <: String`. (SLS 3.2.10)
Error occurred in an application involving default arguments.
      compareFrames(result, expected)

【问题讨论】:

    标签: scala


    【解决方案1】:

    toSkip 的默认参数 Set()Set[Nothing] 类型,您必须要求 Set[CX]() 类型为 Set[CX]

    def compareFrames[RX, CX](result: Frame[RX, CX, Double], expected: Frame[_, _, Double], toSkip: Set[CX] = Set[CX](), tol: Double = 1e-10): Unit = {
       // TODO: implement
       ???
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-12
      • 1970-01-01
      • 2013-12-22
      • 2012-08-27
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多