[SCALA] 접속사 패턴 매칭 (무늬 패턴)
SCALA접속사 패턴 매칭 (무늬 패턴)
스칼라 패턴 매칭 ( '패턴 대안')에서 지원 disjunctions에 언어 기능이 있습니다 :
x match {
case _: String | _: Int =>
case _ =>
}
그러나, 종종 동작을 트리거하기 위해 필요한 조사 만족 패턴과 패턴이있는 경우 (결합).
나는 패턴 콤비 '&&'이 기능을 추가 만들었습니다. 내가 스칼라을 사랑하는 이유를 생각 나게 세 어린 선!
// Splitter to apply two pattern matches on the same scrutiny.
object && {
def unapply[A](a: A) = Some((a, a))
}
// Extractor object matching first character.
object StartsWith {
def unapply(s: String) = s.headOption
}
// Extractor object matching last character.
object EndsWith {
def unapply(s: String) = s.reverse.headOption
}
// Extractor object matching length.
object Length {
def unapply(s: String) = Some(s.length)
}
"foo" match {
case StartsWith('f') && EndsWith('f') => "f.*f"
case StartsWith('f') && EndsWith(e) && Length(3) if "aeiou".contains(e) => "f..[aeiou]"
case _ => "_"
}
최신 정보 컴파일러 해석의 A 경우 && B & & C. 다음은 중위 연산자 패턴 (스칼라 기준 제 8.1.9) 어떻게 난 그냥 물어 봤는데. 또한 && (&& (A, B), C)와 같은 표준 추출 패턴 (8.1.7)에이 표현할 수 있습니다. ' 표현이 정상 중위 연산자 방법에 따라 왼쪽에서 오른쪽으로 연관되는 방법을 공지 likeBoolean #를 호출 && inval이 b를 && 허위 사실 = && TRUE '.
해결법
-
==============================
1.난 정말이 트릭을 좋아한다. 나는이 작업을 수행하는 기존의 방법을 알고하지 않습니다, 나는 그것으로 어떤 문제가 예견하지 않습니다 -하지만, 많은 것을 의미하지 않는다. 나는하지를 만들 수있는 방법을 생각할 수 없다.
난 정말이 트릭을 좋아한다. 나는이 작업을 수행하는 기존의 방법을 알고하지 않습니다, 나는 그것으로 어떤 문제가 예견하지 않습니다 -하지만, 많은 것을 의미하지 않는다. 나는하지를 만들 수있는 방법을 생각할 수 없다.
아마도 ... 표준 라이브러리에 추가한다. 그러나 나는 열심히 조금 생각합니다. 한편, 어떻게 등으로 Scalaz 사람들 이야기는 어떻습니까? 그것은 자신의 전문 분야와 같은 더 많은 보인다.
-
==============================
2.이 가능한 문제는 패턴 매처가 생성하는 비 대한 번역이다. 여기 scalac의 -print로 생성 된 샘플 프로그램의 번역이다. 심지어 -optimise은 if (참) "_"다른 새로운 MatchError을 던져 () 표현을 단순화하기 위해 실패합니다.
이 가능한 문제는 패턴 매처가 생성하는 비 대한 번역이다. 여기 scalac의 -print로 생성 된 샘플 프로그램의 번역이다. 심지어 -optimise은 if (참) "_"다른 새로운 MatchError을 던져 () 표현을 단순화하기 위해 실패합니다.
하나의 메소드에 대한 법적,이 콤비의 사용은 그 문제를 증폭 것보다 큰 패턴 일치는 이미 더 바이트 코드를 생성합니다.
&&는 언어에 내장 된 경우, 아마도 번역은 똑똑 수 있습니다. 또한, -optimise 작은 개선이 도움이 될 수.
from https://stackoverflow.com/questions/2261358/pattern-matching-with-conjunctions-patterna-and-patternb by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 추상 클래스와 형질의 차이 [중복] (0) | 2019.11.25 |
---|---|
[SCALA] scala.concurrent.Promise의 사용 사례는 무엇입니까? (0) | 2019.11.25 |
[SCALA] 스칼라에서하는 키워드 무슨 유형을 '이해 (0) | 2019.11.25 |
[SCALA] 스칼라에 로그인 (0) | 2019.11.25 |
[SCALA] 좋은 scalaz 소개 [마감] (0) | 2019.11.24 |