2012-02-22 28 views
18

Im dönüşü ve Some kaldırmak için kolay bir yol var IS Some[String]Scala Harita # get ve scala <code>Map#get</code> fonksiyonunu kullanan bazı()

olarak döndüren her doğru sorgu için?

Örnek:

def searchDefs{ 
    print("What Word would you like defined? ") 
    val selection = readLine 
    println(selection + ":\n\t" + definitionMap.get(selection)) 
    } 

Ben bu yöntemi kullanın ve aşağıdaki Giriş kullandığınızda:

What Word would you like defined? Ontology 

döndürdü değer:

Ontology: 
    Some(A set of representational primitives with which to model a domain of knowledge or discourse.) 

Ben Bazı kaldırmak istiyorum() etrafında.

Herhangi bir ipucu?

+0

Ayrıca bkz: http://stackoverflow.com/questions/9364250/working-with-some-and-option

Son olarak, böyle Option türlerinde eşleşen desen kullanmak da popüler -in-scala –

+3

'Option' hakkında harika bir şey,' None' davasıyla başa çıkmaya zorlanmasıdır. –

cevap

32

Option türüyle uğraşmanın birçok yolu vardır. Ancak her şeyden önce, bir potansiyel null referansı yerine bunun ne kadar olması gerektiğini farkedin! Bundan kurtulmaya çalışmayın, çünkü Java'nın nasıl çalıştığına alışkınsınızdır.

Yakın zamanda belirttiğimiz gibi: birkaç hafta boyunca onunla çalışın ve her seferinde Option türünü sunmayan bir dile geri dönmeniz gerektiğine inanın.

Şimdi sıra Sorunuz için

, en basit ve en riskli yolu şudur:

bir Some nesne üzerinde .get çağrılması
mymap.get(something).get 

içeride nesneyi alır. Bununla birlikte, bunun yerine, bir None (örneğin, anahtar eşlemeniz değilse), bir çalışma zamanı özel durumu verir.

Daha net bir yol aşağıdaki gibi Option.foreach veya Option.map kullanmaktır:

scala> val map = Map(1 -> 2) 
map: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2) 

scala> map.get(1).foreach(i => println("Got: " + i)) 
Got: 2 

scala> map.get(2).foreach(i => println("Got: " + i)) 

scala> 

Gördüğünüz gibi, bu gerçek bir değere sahip ve yalnızca eğer bir açıklama çalıştırmasına izin veriyor. Option bunun yerine None ise, hiçbir şey olmaz.

scala> map.get(1) match { 
    | case Some(i) => println("Got something") 
    | case None => println("Got nothing") 
    | } 
Got something 
+2

'mymap (bir şey)' daha güzel görünüyor. – elbowich

+0

@elbowich: Evet, 'mymap (birşeyler)', haritada bir şeyin kesinlikle bulunduğunu bildiğinizde iyi bir alternatif gibi görünüyor. – cib