scala - (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
解决方案
这是一个非常琐碎但非常乏味的问题。
(String, Int, Boolean) => Double
. 是一个 double 的三个参数的函数。
但是你想要一个参数的函数(三个元素的元组)到一个双精度。
尝试:
class Test extends Foobar[(String, Int, Boolean)] {
override def method: ((String, Int, Boolean)) => Double = {
case (_, _, _) => 3.0
}
}
推荐阅读
- javascript - Symfony 4 - 使用带有 webpack encore 的 Algolia 地方
- nuget - Artifactory 中的 Nuget 异常
- python - 如何检查字符串列表中的字符串是否在熊猫数据框列中
- java - 按顺序对数组进行排序
- javascript - javascript中的函数语法
- postgresql - 定义子实体与使用类型列之间的性能差异
- angular - Angular 8:mat-datepicker 的问题。我尝试使用 [startAt] 禁止选择今天之前的日期
- c# - 如何安装 Emgu.cv xamarin 表单
- ios - GCDAsyncSocket doesn't send data to TCP Socket server
- css - 我可以在 ant design 的表中设置一个类名吗?