首页 > 解决方案 > (String, Int, Boolean) 类型的覆盖方法 => Double 具有不兼容的类型

问题描述

以下代码应该对 afaik 进行类型检查,但事实并非如此。我宁愿避免给参数类型命名,因为它们可能会在数量和类型上发生变化。

trait Foobar[K] {
     def method: K => Double
}
class Test extends Foobar[(String, Int, Boolean)] {
     override def method: (String, Int, Boolean) => Double = (_, _, _) => 3.0
      // This also fails
     // override def method: (String, Int, Boolean) => Double = { case (_, _, _) => 3.0 }
}

错误是

在类型 => ((String, Int, Boolean) => Double 的 trait Foobar 中覆盖方法方法;方法方法具有不兼容的类型覆盖 def 方法:(String, Int, Boolean) => Double = ( , ,_) => 3.0

标签: scala

解决方案


这是一个非常琐碎但非常乏味的问题。

(String, Int, Boolean) => Double. 是一个 double 的三个参数的函数。
但是你想要一个参数的函数(三个元素的元组)到一个双精度。

尝试:

class Test extends Foobar[(String, Int, Boolean)] {
  override def method: ((String, Int, Boolean)) => Double = {
    case (_, _, _) => 3.0
  }
}

推荐阅读