我是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,不是重复的)问题。
答案 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)