如何为带有类型参数的类型添加上下文边界(context bound)TypeTags?

3

给定一个类:

class MyClass[A, B[A] <: SomeClass[A]](...) { ... }

我想为A和B[A]添加类型标签。

不过,

class MyClass[A: TypeTag, B[A] <: SomeClass[A]: TypeTag]

抱怨 B 类型参数的问题。添加一个隐式的 TypeTag[B[A]] 看来可以解决问题,但我需要它作为某些显式类型转换的上下文绑定。

1个回答

4

如果类MyClass的签名中只有B[A],没有B[OtherClass]B[_],则可以使用B代替B[A]

class MyClass[A: TypeTag, B <: SomeClass[A]: TypeTag](sc: B, e: A)
new MyClass(new SomeClass[String], "a")
// MyClass[String,SomeClass[String]] = MyClass@790e79dc

这里有一个使用 B[A] 的丑陋解决方案,但我猜你应该只使用隐式参数:
class MyClass[A: TypeTag,
              B[A] <: SomeClass[A]: ({type l[M[_]] = TypeTag[M[A]]})#l ](sc: B[A], e: A)

很遗憾,类型B[A]在MyClass中作为另一个需要[A]的类的类型是必需的,所以我不能没有它。 - Aeris130
@Aeris130:看最新的更新,但是你应该使用一个隐式参数。 - senia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接