众所周知,在Scala2中,宏是严格本地的,并且在定义类时只执行一次。当与抽象类型结合时,这一功能似乎特别弱,因为将抽象类型转换为具体类型的过程通常绕过宏,并使用自己的原始规则。-- Any
哦,AA类型被完全忽略了,因为implicitly[TypeTag[this.type]]是由一个内置宏implicit支持的,它只在定义了BB时执行一次,而不是在定义AA并具体化实际的kk.this.type我对非常核心的解决方案持开放态度,比如编译器扩展和宏,但是一种优雅的变通方法可以顺利地移植到Scala3