9
요즘 추출기와 주변 놀았 던
에 일치하고 목록 추출기 특히이 작동하는 방법 궁금 :이해 패턴 목록
List(1, 2, 3) match {
case x :: y :: z :: Nil => x + y + z // case ::(x, ::(y, ::(z , Nil)))
}
확인 :: 패턴에 사용되는, 그래서 컴파일러는 추측됩니다 이제 :: - Object에서 적용되지 않는 메소드를 찾습니다. 그래서 이것을 시도 :
scala> (::).unapply(::(1, ::(2, Nil)))
res3: Option[(Int, List[Int])] = Some((1,List(2)))
좋은 작품. 그러나이되지 않습니다
scala> (::).unapply(List(1,2,3))
<console>:6: error: type mismatch;
found : List[Int]
required: scala.collection.immutable.::[?]
(::).unapply(List(1,2,3))
을이가하는 동안 :
scala> List.unapplySeq(List(1,2,3))
res5: Some[List[Int]] = Some(List(1, 2, 3))
사실 나는 순간에 조금 의아해 해요. 컴파일러는 여기서 어떻게 적용 취소의 올바른 구현을 선택합니까?
그리고 컴파일러는 :: 왜냐하면 :: List의 하위 유형입니까? 업데이트 : 아, 알았어. ^^. – raichoo
@raichoo - 패턴에서'::'를 요구하기 때문에 시도합니다. –
그렇습니다. 그 명확한 주셔서 감사합니다 :) – raichoo