2017-01-25 2 views
2

스칼라에서 책을 읽는 동안 나는 다음 코드를 우연히 발견했다. 함수, 매개 변수, 변수에 코드를 분리 할 수 ​​없습니다.아래 코드를 디코딩 스카라 코드

val feeds = Map("Andy Hunt" -> "blog.toolshed.com", 
       "Dave Thomas" -> "pragdave.me",  
       "NFJS"  -> "nofluffjuststuff.com/blog") 

val fiterName = feeds filter { element => 
    val (key, value) = element  
    (key startsWith "D") && (value contains "pragprog") 
} 

코드를 단계별로 설명 할 수 있습니까?

답변

6

feeds은 사람을 블로그에 매핑하는 Map[String, String]입니다.

그런 다음 해당지도는 filter으로 반복되며 대문자 "D"으로 시작하고 작성자가 "pragprog"라는 단어를 포함하는 필자를 필터링하려고 시도합니다.

Mapfilter을 입력하면 키가 첫 번째 요소이고 값이 두 번째 요소 인 튜플이 생깁니다. 둥근 괄호를 사용하면, 다음과 같다 : 자체

val filterName = feeds.filter(element => { 
    val (key, value) = element  
    key.startsWith("D") && value.contains("pragprog") 
}) 

참고 higher order function 필터는, 그것의 입력과 같은 다른 기능 걸린다. 이 함수는 A 유형의 인수를 취합니다. 여기서는 튜플 (String, String)이고 요소가 조건과 일치하는지 여부를 나타내는 부울을 생성합니다. 하지 ._1를 통해 및 _.2

+0

그럼 내가 이해하는 Tuple2[String, String] 걸리고 이름으로 튜플의 구성 요소에 액세스 할 수 있도록, 그것은 unapply 메소드의 호출

val (key, value) = element 

: 필터 내부, 그들은 튜플 해체를 사용 코드를보고 있지만 궁금한 점은 무엇입니까? spec 필터에 따라 술어 (String, String) => 부울을 취합니다. 그걸 염두에두고 val (key, value) = element는 무엇을 의미합니까? 어떤 값에서 부울 표현식 (키 startsWith "D") && ("pragprog"값 포함)이 호출됩니까? – Gurupraveen

+0

@Gurupraveen 귀하의 질문에 대한 답변을 업데이트했습니다. –

+0

고맙습니다. 좋은 설명과 설득력이있었습니다. – Gurupraveen