2013-12-16 3 views
1

스칼라에서 패턴 일치를 수행 할 때 제네릭과 지우기를 처리하는 가장 좋은 방법은 무엇입니까 (제 경우에는지도). 나는 컴파일러 경고없이 적절한 구현을 찾고있다. Map [Int, Seq [String]]을 반환 할 함수가 있습니다. 현재 코드는 다음과 같이 표시됩니다.일반지도에서 스칼라 패턴 일치

+0

이 코드가 생성하는 컴파일러 경고를 추가하십시오. –

+2

[약간의 리팩터링 후 동일한 코드] (http://pastebin.com/1mhbj9WE). – senia

+2

여기에 많은 문맥이 필요합니다. 먼저, 정확히 무엇을 성취하려고합니까? 당신은 하나의 사례와 단지 "패턴 매칭"이므로 의도가 명확하지 않습니다. 어떤 오류가 있고 어떤 입력 사항입니까? –

답변

1

for (일부는 패턴 일치가 내장되어 있음)을 사용하는 것이 합리적 일 수 있습니다. 또한 우리는 Map이 튜플의 목록임을 고려할 수 있으며, 우리의 경우 (String, Object) 유형입니다. 뿐만 아니라 우리는 그래서,이 예제 가능성이 예외를 무시합니다 :

import scala.collection.mutable.HashMap 

def convert(json: Map[String, Object]): HashMap[Int, Seq[String]] = { 

    val converted = for { 
    (id: String, description: Seq[Any]) <- json 
    } yield (id.toInt, description.map(_.toString)) 

    HashMap[Int, Seq[String]](converted.toSeq: _*) 
} 

그래서, 우리 for 이해 한 다음, (String, Seq[Any]) 유형 만 튜플을 고려 Seq[String]IntSeq[Any]String 변환 결합합니다. Map을 변경할 수 있습니다.

2

스칼라 라이브러리를 사용하여 처리하십시오. Jackson을 기반으로하는 라이브러리 (예 : Play ScalaJson, 독립 실행 형을 사용하는 경우 this article 참조) 및 Jackson을 기반으로하지 않는 라이브러리 (내 선호는 Spray-Json 일 수 있지만 Argonaut 임)가 있습니다.

이러한 라이브러리 및 기타 을 해결합니다. 손으로 그것을하는 것은 어색하고 오류가 발생하기 쉽기 때문에하지 마십시오.