Bir sınıf değişkeninin değerini tanımlamak için bir "eşleşme" deyimini nasıl kullanabilirim? Aşağıdaki geçersiz olduğunu ve kabul edilebilir bir varyantı bulamıyor - eğer başka ... ... else if else ...Scala "match" deyiminde sınıfları nasıl eşleştirebilirim?
val c: Class[_] = classOf[Int]
val what = c match { case classOf[Int] => "int!"; case classOf[Float] => "float!" }
derleyici yakınır: error: not found: type classOf
Ve tabii bu tip bilgiler silinir çünkü ben Class[Int]
kullanamazsınız:
c match { case Class[Int] => "int!"; case Class[Float] => "float!" }
error: type Class of type Class does not take type parameters.
Ben de denedim varyantları Int.class
gibi tüm boşuna. (Ve gerçekten dizeleri dönüştürmek istemiyorum: Derleyicinin yeniden adlandırılmış sınıfları değiştirdiğinin farkındayım.)
Yoğun muyum muyum yoksa Scala kör noktaya mı geldim?
Peki, aşağıda cevapları cevapları için doğru (ve teşekkür vardır!) ama giderek daha fazla görünüyor * bu Scala'da bir tür çirkin delik. Sınıflar tekildir, bu yüzden onları verimli bir şekilde eşleştirmek için değişkenlere atamak zorunda olmanız için hiçbir neden yoktur - ya da muhafızlar ya da ayrı ifadeler olarak yazılan, basamaklı bir dizi ifs kullanmaya başvurma. Ama görünüşe göre, öyle. – Tim