什么是Scala中的ClassManifest?

时间:2016-09-14 09:16:24

标签: scala

我是Scala的新手,我正在从帖子中学习“上下文绑定”。但是我发现其中许多人正在使用ClassManifest作为示例解释“上下文绑定”。例如,

def tabulate[T](len: Int, f: Int => T)(implicit m: ClassManifest[T]) = {
    val xs = new Array[T](len)
    for (i <- 0 until len) xs(i) = f(i)
    xs
}

我发现隐含参数m是必需的,但从未在函数体中使用过,我觉得很奇怪。因此,我想知道ClassManifest是什么以及它与上下文绑定的关系。谢谢!

修改

之前我见过What is a Manifest in Scala and when do you need it?,但它要求Manifest而不是ClassManifest,并且该帖子中没有关于ClassManifest的解释,因此我问这类似(但是,IMO,不是重复的)问题。

1 个答案:

答案 0 :(得分:2)

您可以找到关于旧版Scala版本ClassManifest的解释(在2.10之前)here。请阅读所有答案,some of them explain not only Manifest but ClassManifest too

  

还存在一个名为ClassManifest的较弱的形式   通过只知道一个类型的顶级类来构造,而不是   必须知道它的所有论证类型。

在Scala 2.11.8中,不推荐使用2.12-M4 ClassManifest并成为alias to ClassTag

type  ClassManifest[T] = ClassTag[T]

自2.10.0以来已弃用。

P.S。实际上来自scala文档的this post你可能读过已经过时了,即使是deprecated too所描述的视图边界(<%)(很长一段时间)所以你也应该避免它们(using this simple trick if you really need them, but implicit views are not recommended in any form