나는 스칼라에 일치하는이 패턴에 관한 질문했습니다 : 나는 어떻게 패턴 매칭 작품과 스칼라에서의 syntaxis을 이해했습니다패턴 매칭 함수 인수는
val div: (Double, Double) => Double = {
case (x, y) if y != 0 => x/y
}
을하지만,이 표현은 미친 저를 구동한다. 컴파일러는 x와 y가 함수와 패턴 매치의 인수라는 것을 어떻게 알 수 있습니까?
나는 스칼라에 일치하는이 패턴에 관한 질문했습니다 : 나는 어떻게 패턴 매칭 작품과 스칼라에서의 syntaxis을 이해했습니다패턴 매칭 함수 인수는
val div: (Double, Double) => Double = {
case (x, y) if y != 0 => x/y
}
을하지만,이 표현은 미친 저를 구동한다. 컴파일러는 x와 y가 함수와 패턴 매치의 인수라는 것을 어떻게 알 수 있습니까?
이 규칙은 스칼라 언어 사양의 8.5 "Pattern Matching Anonymous Functions" 섹션에 정의되어 있습니다. 패턴 일치가있는 익명의 함수를 사용하는 경우 유형을 부분적으로 제공해야합니다. 형식은 (Double, Double) => Double
이며 Function2[Double, Double, Double]
의 줄임말로 알 수 있습니다. 이제
:
예상되는 형태가
scala.Function k [S1,…,Sk, R]
경우는, 표현이 익명 함수에 해당 될 가져온 것입니다(x1:S1,…,xk:Sk) => (x1,…,xk) match { case p1 => b1 … case pn => bn }그래서 상관없이
어떤 함수의 인수에 대응, 패턴 일치는 함수 인수의 튜플을 통과하므로 일반 튜플 추출기 구문을 사용할 수 있습니다.
그래서 예 x
및 y
은 당신의 상상력에 달려 있습니다 추출기 매개 변수의 명명
val div: (Double, Double) => Double = (a, b) => (a, b) match {
case (x, y) if y != 0 => x/y
}
또는
val div = (a: Double, b: Double) => (a, b) match {
case (x, y) if y != 0 => x/y
}
의 약자입니다. 추출기의 결과 요소를 호출하는 방법을 결정하면 case (foo, bar) => ...