2012-02-22 3 views
18

イム、およびSome[String]Scalaの地図#を取得し、いくつかのリターン()

Someを削除する簡単な方法があるので、すべて正確なクエリのためにそれを返しますか?

例:

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

私は、このメソッドを使用して、次の入力を使用する場合:

What Word would you like defined? Ontology 

返された値があるが:

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

私はいくつかを削除したいですその周りの()。

ヒント?

+0

も参照してください:http://stackoverflow.com/questions/9364250/working-with-some-and-option

最後に、このようなOptionタイプにパターンマッチングを使用することも人気があります-in-scala –

+3

'Option'の素晴らしい点は、' None'の場合を扱うことです。 –

答えて

32

Optionタイプにはさまざまな方法があります。まず第一に、潜在的ではなく、これを持っていることがどれほど良いか理解してくださいnullリファレンス!あなたがJavaの仕組みに慣れているので、単純に取り除こうとしないでください。

最近誰かが言ったように、数週間それに固執し、Optionタイプを提供していない言語に戻らなければならないたびに息を吹き返します。

は今、あなたの質問のように、最も単純で最も危険な方法はこれです:Someオブジェクトに.getを呼び出す

mymap.get(something).get 

は、内部のオブジェクトを取得します。ただし、代わりにNoneがある場合(たとえば、キーがマップにない場合など)、実行時例外が発生します。

Aよりクリーンな方法は次のようにOption.foreachまたはOption.mapを使用することです:あなたが見ることができるように

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> 

、これはあなたがあれば文を実行することができます、あなたは実際の値を持っている場合にのみ。 OptionNoneの場合、何も起こりません。

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

'mymap(something)'がよりきれいに見えます。 – elbowich

+0

@elbowich:はい、 'mymap(something)'は、あなたが「何か」がマップに確実に含まれていることを知っているときに良い選択肢と思われます。 – cib

関連する問題