我在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
我找不到此错误的任何明显原因。任何想法如何解决这个问题。
答案 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参数。