Scala 中如何提供 ClassTags?
How are ClassTags made available in Scala?
有
def fn[T: ClassTag](...)
需要有一个隐式的 ClassTag[T] 可用。这些是如何提供的?某处是否有 ClassTags 列表?我看到 implicit val c: ClassTag[Any]
不会削减它,因为 ClassTag 是不变的。 ClassTags 如何用于自定义 类?例如,在
import scala.reflect.ClassTag
class A
def fn[T: ClassTag](e: T) = Array.fill[T](1)(e)
fn(new A())
ClassTag[A] 来自哪里?此代码无需我定义即可编译。
在 Predef 中搜索 implicits 和源代码中的反射包对我没有帮助。
答案在 documentation 中 class:
If an implicit value of type u.ClassTag[T] is required, the compiler will make one up on demand.
有
def fn[T: ClassTag](...)
需要有一个隐式的 ClassTag[T] 可用。这些是如何提供的?某处是否有 ClassTags 列表?我看到 implicit val c: ClassTag[Any]
不会削减它,因为 ClassTag 是不变的。 ClassTags 如何用于自定义 类?例如,在
import scala.reflect.ClassTag
class A
def fn[T: ClassTag](e: T) = Array.fill[T](1)(e)
fn(new A())
ClassTag[A] 来自哪里?此代码无需我定义即可编译。
在 Predef 中搜索 implicits 和源代码中的反射包对我没有帮助。
答案在 documentation 中 class:
If an implicit value of type u.ClassTag[T] is required, the compiler will make one up on demand.