scala - Scala 类型不匹配;找到:Int(0) 需要:Int
问题描述
我在包装类下面写了Int
.
case class Wrapper[Int](value: Int) {
def map(f: Int => Int): Wrapper[Int] = Wrapper(f(value))
def flatMap(f: Int => Wrapper[Int]): Wrapper[Int] = f(value)
def filter(f: Int => Boolean): Wrapper[Int] = Wrapper(if(f(value)) 0 else value)
}
当我编译代码时,出现以下错误 -
type mismatch;
[error] found : Int(0)
[error] required: Int
[error] def filter(f: Int => Boolean): Wrapper[Int] = Wrapper(if (f(value)) 0 else value)
[error] ^
[error] one error found
我找不到此错误的任何明显原因。任何想法如何解决这个问题。
解决方案
通过编写class Wrapper[Int]
,您已经定义了一个名为 的类型参数Int
。每当您在类内部编写Int
时,您都会引用该类型参数,而不是实际Int
类型。
您的定义完全等同于:
case class Wrapper[T](value: T) {
def map(f: T => T): Wrapper[T] = Wrapper(f(value))
def flatMap(f: T => Wrapper[T]): Wrapper[T] = f(value)
def filter(f: T => Boolean): Wrapper[T] = Wrapper(if(f(value)) 0 else value)
}
如果你尝试编译这个版本,你会得到一个更容易理解的错误,即在预期的Int
地方存在 a 。T
如果您希望包装器特定于整数,则应删除类型参数。
推荐阅读
- javascript - 在网格中排列动态创建的 div
- point-cloud-library - 带标签的 CAR 点云 KITTI
- ruby-on-rails - 为什么升级 Rails 和 Ruby 后 Heroku slug 的大小翻了一番?
- css - 检查类是否在任何祖先上的 Sass 选择器
- django - Django的模板语言不会在异常时静默失败?
- r - 从 R 下关闭与 Julia 的连接
- pandas - 将不同形状的 CSV 组合成一个 CSV
- c# - 无法从 String 转换为 TimeSpan 错误
- ms-access - 缺少 ODBC 定义导致访问查询失败
- excel - 如果/那么逻辑 - 基于名称以什么字母开头