覆盖类型(String, Int, Boolean)的方法=>Double的类型不兼容。

问题描述 投票:2回答:1

下面的代码应该进行类型检查,但它没有。我宁愿避免给参数类型命名,因为这些参数类型会在数理和类型上发生变化。

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

scala
1个回答
3
投票

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

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

试试用。

class Test extends Foobar[(String, Int, Boolean)] {
  override def method: ((String, Int, Boolean)) => Double = {
    case (_, _, _) => 3.0
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.