Scala类型不匹配;找到:Int(0)必需:Int

时间:2018-12-23 22:00:06

标签: scala

我在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

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

1 个答案:

答案 0 :(得分:5)

通过编写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的地方出现T

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