我对 Scala 比较陌生,正在尝试定义一个通用对象方法。但是,当我在方法中引用参数化类型时,我收到“No ClassTag available for T”。这是一个说明问题的人为示例。
scala> def foo[T](count: Int, value: T): Array[T] = Array.fill[T](count)(value)
<console>:7: error: No ClassTag available for T
def foo[T](count: Int, value: T): Array[T] = Array.fill[T](count)(value)
^
预先感谢您帮助理解这里的问题以及如何使这个人为的示例发挥作用。
在通用上下文中实例化数组(实例化数组T
where T
是一个类型参数),Scala 需要在运行时有关于T
,以类型的隐式值的形式ClassTag[T]
。
具体来说,您需要方法的调用者(隐式)传递此ClassTag
值,这可以方便地使用上下文绑定:
def foo[T:ClassTag](count: Int, value: T): Array[T] = Array.fill[T](count)(value)
有关此情况的(完整)描述,请参阅此文档:
https://docs.scala-lang.org/sips/scala-2-8-arrays.html https://docs.scala-lang.org/sips/scala-2-8-arrays.html
(简而言之,ClassTags 是 ClassManifests 的重新实现,因此其基本原理仍然存在)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)