对于以下功能:
def reverse[T](a: Array[T]): Array[T] = {
val b = new Array[T](a.length)
for (i <- 0 until a.length)
b(i) = a(a.length -i - 1)
b
}
Run Code Online (Sandbox Code Playgroud)
我从第2行得到"错误:无法找到元素类型T的类清单".
反正有没有解决这个问题?
Aar*_*rup 10
只需在方法声明中添加一个上下文绑定的ClassManifest:
def reverse[T : ClassManifest](a: Array[T]): Array[T] = ...
Run Code Online (Sandbox Code Playgroud)
为了构造数组,必须在编译时知道数组的具体类型.此类型由编译器通过隐式ClassManifest参数提供.也就是说,Array构造函数的签名实际上是
Array[T](size: Int)(implicit m: ClassManifest[T]): Array[T]
Run Code Online (Sandbox Code Playgroud)
为了提供此参数,在调用Array构造函数时,范围内必须有ClassManifest.因此,您的反向方法还必须采用隐式ClassManifest参数:
def reverse[T](a: Array[T])(implicit m: ClassManifest[T]): Array[T] = ...
// or equivalently
def reverse[T : ClassManifest](a: Array[T]): Array[T] = ...
Run Code Online (Sandbox Code Playgroud)
后者,更简单的表示法称为上下文绑定.