2012-02-22 3 views
18

임의 반환하고,이 Some을 제거하는 쉬운 방법이 Some[String]스칼라지도 # get 및 및 스칼라 <code>Map#get</code> 기능을 사용하여 일부()

로 반환 모든 정확한 쿼리?

예 :

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' case를 처리해야한다는 것입니다. –

답변

32

Option 유형을 처리하는 데는 여러 가지 방법이 있습니다. 우선, 그러나 잠재 성이 대신에 이것을 가지고있는 것이 얼마나 더 좋은지 깨닫습니다 null! 자바의 작동 방식에 익숙해 져 있기 때문에 단순히 제거하지 마십시오.

다른 사람이 최근에 말했듯이 : 몇 주 동안 붙어서 Option 유형을 제공하지 않는 언어로 돌아 가야 할 때마다 신음 할 것입니다.

이제 귀하의 질문에 대한

, 간단하고 위험한 방법은 이것이다 :

Some 객체에 .get를 호출
mymap.get(something).get 

내부 객체를 검색합니다. 그러나 대신 None이있는 경우 (예 : 키가 맵에없는 경우) 런타임 예외가 발생합니다.

훨씬 깨끗한 방법은 다음과 같이 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