嗨,我正在学习 Advanced Scala 书,但我在理解 scalaz 源代码中的这段代码时遇到了一些麻烦:
object Tag {
/** `subst` specialized to `Id`.
*
* @todo According to Miles, @specialized doesn't help here. Maybe manually specialize.
*/
@inline def apply[@specialized A, T](a: A): A @@ T = a.asInstanceOf[A @@ T]
// ...
}
它如何工作?a.asInstanceOf[A @@ T]
应该因 ClassCastException 而失败,不是吗?
一个使用示例是:
Multiplication(2) |+| Multiplication(3)
在这种情况下a
是 Int 如何将其转换为@@[Int, Multiplication]
( Tagged[Int, Multiplication]
)
谢谢您的帮助。