1

「Instanceof」に一致する動的関数を作成しようとするまで、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)   // 

  }

}

---明確にするために(そして答えをありがとう)更新しますが、実行時にクラスタイプのパターンマッチングを動的に実行するにはどうすればよいですか?Scalaには静的な型マッチングがあるようです(上記の例では分解されます)が、instanceOf()は動的チェックの私の選択ですか?

4

2 に答える 2

4

型パラメーターは実行時に消去されるため、事実上、何でも意味する とTYPE同等です。Object

また、型パラメーターは値ではなく型であるため、変数に割り当てることはできません。せいぜい、これを行うことができます:

type save = TYPE

ただし、それも消去されるため、何も保存されません。

于 2012-07-05T00:20:18.193 に答える
1

より強力な実行時型チェックについては、scala.reflect.Manifest[T]. a をラップし、java.lang.Class[T]いくつかの優れた分散チェック演算子を追加します。

以下は使用例です: EnMAS POMDP State Class

于 2012-07-05T14:35:13.577 に答える