"match"ステートメントを使用してクラス変数の値を特定するにはどうすればよいですか?以下は無効である、と私は許容バリアント見つけることができない - 場合以外... ...他にあれば、他の...Scalaの "match"ステートメントでクラスをどのように一致させることができますか?
val c: Class[_] = classOf[Int]
val what = c match { case classOf[Int] => "int!"; case classOf[Float] => "float!" }
コンパイラは文句:error: not found: type classOf
そしてもちろんをその型情報が消去されているので、私はClass[Int]
を使用することはできません。
c match { case Class[Int] => "int!"; case Class[Float] => "float!" }
error: type Class of type Class does not take type parameters.
を私も無駄にInt.class
、すべてのようなバリエーションを試してみました。 (そして、私は実際に文字列に変換したくありません:コンパイラに名前を変更/移動したクラスをキャッチさせることが重要だと感じています)
私は密集しているのですか、または私はScalaのブラインドスポットに遭遇しましたか?
はまあ、以下の答えが正しい(と回答に感謝です! )しかし、ますますスカラの醜い穴のように見える*。クラスはシングルトンなので、変数を効率的にマッチングさせるために変数を変数に代入する必要はありません。また、カスケードな一連のifを使用したり、ガードや別のステートメントとして記述したりする必要はありません。しかしそれは明らかにそうです。 – Tim