下面的代码应该进行类型检查,但它没有。我宁愿避免给参数类型命名,因为这些参数类型会在数理和类型上发生变化。
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 }
}
错误是
覆盖trait Foobar中类型为=>((String, Int, Boolean)=>Double;方法方法有不兼容的类型覆盖def方法。(String, Int, Boolean) => Double = (,,_) => 3.0
这是一个非常琐碎但非常繁琐的问题。
(String, Int, Boolean) => Double
......是一个三个参数的函数,是一个Double的函数。但你想要的是一个参数的函数 组成 到双。
试试用。
class Test extends Foobar[(String, Int, Boolean)] {
override def method: ((String, Int, Boolean)) => Double = {
case (_, _, _) => 3.0
}
}