无法找到类型为scala.reflect.ClassManifest [T]的证据参数的隐
发布时间:2020-12-16 09:11:49 所属栏目:安全 来源:网络整理
导读:看来我不明白什么重要,也许是擦除(死). 我有一个方法,我想创建一个大小为n的数组,其中包含来自gen的值: def testArray[T](n: Int,gen: =T) { val arr = Array.fill(n)(gen) ...} 并使用它,例如: testArray(10,util.Random.nextInt(10)) 但是我收到错误: s
看来我不明白什么重要,也许是擦除(死).
我有一个方法,我想创建一个大小为n的数组,其中包含来自gen的值: def testArray[T](n: Int,gen: =>T) { val arr = Array.fill(n)(gen) ... } 并使用它,例如: testArray(10,util.Random.nextInt(10)) 但是我收到错误: scala: could not find implicit value for evidence parameter of type scala.reflect.ClassManifest[T] val arr = Array.fill(n)(gen) ^ 请,解释我做错了什么,为什么这个错误,以及什么样的代码是不可能的? 解决方法
那是因为在testArray中,T的具体类型在编译时是不知道的.您的签名必须像def testArray [T:ClassManifest](n:Int,gen:=> T),这将添加一个类型为ClassManifest [T]的隐式参数到您的方法中,这将自动传递给testArray然后进一步传递给Array.fill调用.这被称为上下文绑定.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |