gpt4 book ai didi

scala - 类型类参数的 ClassTag

转载 作者:行者123 更新时间:2023-12-01 07:41:58 26 4
gpt4 key购买 nike

我想创建一个类型类,将其定义的抽象类型限制为具有 ClassTag。这是一个简化的示例:

trait A[T] {
type B <: Z

val tag = implicitly[ClassTag[B]]
}

// Error:(8, 24) No ClassTag available for A.this.B
// val tag = implicitly[ClassTag[B]]
^

我需要 B 来拥有一个 ClassTag[B] 并且我不能像 trait A[T, B: ClassTag] 因为我希望 AT 隐式可用,就像在 def foo[T: A](t: T)B 也必须是某些 Z 的上界,但这似乎没有什么区别。

有没有办法在B上表达ClassTag约束?

最佳答案

编译器无法在此处为您提供 ClassTag,因为它不知道 B 最终可能是什么。

让它成为一个抽象的def,并让A的具体实现提供它:

trait A[T] {
type B <: Z
def tag: ClassTag[B] // you may want to declare it as implicit
}

例如,

new A[Int] {
type B = Z
def tag = implicitly
}

关于scala - 类型类参数的 ClassTag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36330798/

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