2012-07-30 19 views

cevap

34

a.get.asInstanceOf[Int] yapabilirdiniz, ancak bu güvenli değildir. Option[Any] yerine Option[Int] kullanarak tür bilgisini korumak daha iyi bir yol olacaktır. Ardından sonucu asInstanceOf ile göndermeniz gerekmez. Option bir None ise bir istisnası atılır beri get kullanma

val a:Option[Int] = Some(1) 
val i = a.get 

doğrudan güvensiz. Yani getOrElse kullanmak daha güvenlidir. Ya da değeri almak için a modelinde desen eşleştirmeyi kullanabilirsiniz.

val a:Option[Any] = Some(1) // Note using Any here 
val i = (a match { 
    case Some(x:Int) => x // this extracts the value in a as an Int 
    case _ => Int.MinValue 
}) 
+1

Döküm hakkında biraz unutun; desen eşleştirme açıkça gitmek için yoldur –

+0

Katılıyorum. Desen eşleştirme çok güçlü ve harika :) –

12

verdi int

a.getOrElse(0).asInstanceOf[Int] 

Bunun güvensiz döküm olduğunu not etmeliyim: Seçenekleriniz Int içeriyorsa, runt alırsınız ime istisnası.

3

Bunu yapamayacağınız nedeni, almanızın gerekmemesidir. Statik yazılan programlama dilleri bir tür ile diğeri arasında manuel olarak yayın yapmanıza izin verirken, size verebileceğim en iyi öneri bu özellikleri unutmaktır.

Özellikle, her bir programlama dilinden en iyi şekilde yararlanmak istiyorsanız, uygun bir kullanıcı yapmaya çalışın ve bir dil, kullanıma uygun değilse, başka bir tane seçin (dinamik olarak yazılanlar gibi). : Eğer yaparsanız

potansiyel bir derleme zamanı hatası, dönüş atmalarını hangi biz buna zamanında meydana çünkü biz sevmiyorum bir ClassCastException, içine, çözmek kolay olduğundan böyle . Scala'daki dökümleri kullanmanız gerekiyorsa, büyük olasılıkla yanlış bir model kullanıyorsunuzdur.

+3

Ya da (kötü tasarlanmış) Java kütüphaneleri kullanıyorsunuz ... – ziggystar

+2

Ben duyguları takdir ederken, gerçek hayat projelerinde, şeyler her zaman siyah ve beyaz değildir. Temel üçüncü taraf API'sı tarafından döndürülen 4 türden biri olabileceğinden bunu yapmam için meşru bir ihtiyaç var. – Bob

+0

Bu çok zayıf bir mekanizmadır. Aynı şeyi daha iyi desenler ile yapabilirsiniz. Niçin yapmak istediğinizi açıklamaya çalışmıyorsunuz? – Edmondo1984

İlgili konular