首页 > 解决方案 > 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

我找不到此错误的任何明显原因。任何想法如何解决这个问题。

标签: scala

解决方案


通过编写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

如果您希望包装器特定于整数,则应删除类型参数。


推荐阅读