我一直在使用Scala的模式匹配(驚人的順便說一句),直到我試圖做一個動態函數來匹配「實例」和未來作爲一部分對象可能會在稍後保存[type]。現在我明白瞭如何使用模式匹配類模式匹配類型作爲函數,方法等的參數
情況下,X:INT => ....
,但爲什麼會出現這種(下同)似乎任何東西傳遞給它的工作嗎?更進一步,我似乎無法使用[TYPE],它是一個對象嗎?我無法打印它或val =等。我想過嘗試使用關聯的java.Class,但這看起來不正確。任何建議表示讚賞,謝謝!
class Parent
class Child extends Parent
object TestTypes {
def testRelate[TYPE](o:Any) = {
o match {
case o:TYPE => println(" o is a matching type")
case _ => println(" o fails")
}
// val save = [TYPE] .. why can't I do this?
}
def main(args: Array[String]): Unit = {
val p = new Parent
val c = new Child
testRelate[Int](c) // why does this Match???
testRelate[Parent](c) //
}
}
---更新 所以我只想澄清(謝謝你的答案),但有人又如何能做到在運行時動態CLASSTYPE的模式匹配?它似乎scala有一個靜態類型匹配(這在上面的例子崩潰),但是我的動態檢查的選擇是instanceOf()嗎?
提示:當編譯器告訴你的東西是不對的,要注意它。 –
請參閱[本文]的編輯部分(http://stackoverflow.com/questions/11310547/how-to-distinguish-between-objects-with-different-abstract-type-fields/11311312#11311312)。 (這是我第三次發佈這個星期。) – missingfaktor