gpt4 book ai didi

generics - 关于 Scala 泛型 : cannot find class manifest for element type T

转载 作者:行者123 更新时间:2023-12-04 06:27:54 27 4
gpt4 key购买 nike

对于如下功能:

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
}

我从第 2 行收到“错误:找不到元素类型 T 的类 list ”。

有没有办法解决这个问题?

最佳答案

只需添加上下文绑定(bind) ClassManifest到您的方法声明:

def reverse[T : ClassManifest](a: Array[T]): Array[T] = ...

为了构造一个数组,数组的具体类型必须在编译时知道。此类型由编译器通过隐式 ClassManifest 参数提供。也就是说,Array构造函数的签名其实是
Array[T](size: Int)(implicit m: ClassManifest[T]): Array[T]

为了提供此参数,在调用 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] = ...

后一种更简单的符号称为 context bound。 .

关于generics - 关于 Scala 泛型 : cannot find class manifest for element type T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3474073/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com