你好,我正在学习高级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]
)类型?感谢您的帮助。