您好我正在學習高級斯卡拉的書,我有一些麻煩,從scalaz源understading這段代碼:Scalaz`Tag.apply`:它是如何工作的?
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]
)
感謝您的幫助。
什麼是「高級Scala書」?我在Google上沒有找到任何這樣的書。 –
這是從下劃線書:http://underscore.io/training/courses/advanced-scala-scalaz –