我写了下面的包装类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)
}
Run Code Online (Sandbox Code Playgroud)
当我编译代码时,我得到以下错误 -
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
Run Code Online (Sandbox Code Playgroud)
我找不到任何明显的错误原因.任何想法如何解决这个问题.
通过编写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)
}
Run Code Online (Sandbox Code Playgroud)
如果你试图编译这个版本,你会得到更容易理解的错误,即有Int一个T预期的地方.
如果希望包装器特定于整数,则应删除type参数.