我一直在使用izumi.reflect.Tag
来保存类型信息,它工作得很好。除了当我在某个时候丢失了类型信息,然后我不知道如何找回它。下面是我想做的:
case class Rule[T: Tag](lhs: String, rhs: Repr[T])
字符串
这太棒了。一个Rule
知道它里面的rhs
的类型。除了...
val rules: List[Rule[?]] = // some list of rules
rules.foreach { r =>
process(r)
}
def process[T: Tag](rule: Rule[T]): Unit = // side-effectful processing
型
现在,我得到了could not find implicit value for izumi.reflect.Tag[T]
。好吧,没什么好奇怪的。那个Tag
不能被恢复,因为它和List
中的所有其他标签混在一起了。但是有没有什么方法可以保存这个标签,以便以后再把它找回来呢?
我试过
case class Rule[T: Tag](lhs: String, rhs: Repr[T]):
val LightTypeTag = Tag[T].tag
型
和类似的方法来保持Tag
,这样我就可以做一些事情,
process(r, r.tag)
def process[T: Tag](rule: Rule[T], tag: Tag[T]) = ...
型
或者显式地将Tag[T]
传递到process
方法中,但我不知道如何执行以下操作:
1.保存Tag[T]
类型的值。
1.将LightTypeTag
类型的值转换回Tag[T]
。
1.显式保存和使用其他值的其他组合将进行此类型检查。
任何帮助非常感谢。
1条答案
按热度按时间mwg9r5ms1#
好的。当然,在我发布这个之后,我想我得到了一个答案,但我想确定它是正确的。我意识到我真的很想要一个
Tag[T]
,我不知道如何得到一个,但后来我意识到我有一个given Tag[T]
可用,所以我做到了字符串
如果我在缺少隐式
Tag[T]
的地方加上(using rule.tag)
,事情似乎可以工作,这是正确的处理方法吗?