gpt4 book ai didi

scala - 为什么 implicitly[ClassTag[T]] 解析成功?

转载 作者:行者123 更新时间:2023-12-05 02:20:32 26 4
gpt4 key购买 nike

在下面最简单的例子中我没有编译错误:

object App {
def main(args: Array[String]) = {
test[Int]()
}
def test[T <: Int : ClassTag]() = println(implicitly[ClassTag[T]])
}

程序打印Int。但是我不明白为什么可以为 implicitly[ClassTag[T]] 调用找到类型为 ClassTag[T] 的对象?我唯一做的就是提供通用类型参数。 ClassTag[Int] 从何而来?

最佳答案

: 符号定义了一个上下文绑定(bind),这意味着编译器必须在其隐式中有一个 ClassTag[T] 的实例范围。它是以下内容的语法糖:

def test[T <: Int]()(implicit $ev: ClassTag[T]) = println(implicitly[ClassTag[T]])

隐式的调用将把$ev作为所需的实例。

但这当然将问题推得更远:$ev(证据)从何而来?引用the Scala documentation (引用TypeTagClassTag同理):

Given context bound [T: TypeTag], the compiler will simply generate an implicit parameter of type TypeTag[T] and will rewrite the method to look like the example with the implicit parameter in the previous section.

关于scala - 为什么 implicitly[ClassTag[T]] 解析成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38746158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com