[SCALA] 스칼라의 패턴 매칭 시스템에서 비교 연산자를 사용하여
SCALA스칼라의 패턴 매칭 시스템에서 비교 연산자를 사용하여
그것은 스칼라의 패턴 매칭 시스템을 사용하여 비교 일치 할 수 있습니까? 예를 들면 :
a match {
case 10 => println("ten")
case _ > 10 => println("greater than ten")
case _ => println("less than ten")
}
두 번째 경우 문은 불법입니다,하지만 난 "는보다 큰 경우"를 지정할 수 있도록하고 싶습니다.
해결법
-
==============================
1.당신은 경비를 추가 할 수 있습니다, 즉는 IF와 패턴 후 부울 표현 :
당신은 경비를 추가 할 수 있습니다, 즉는 IF와 패턴 후 부울 표현 :
a match { case 10 => println("ten") case x if x > 10 => println("greater than ten") case _ => println("less than ten") }
편집 : 가드 사실이 아닌 경우이 이상의 표면적으로는 다른 후 경우를두고하는 것으로 도시 =>, 패턴이 일치하지 않기 때문.
-
==============================
2.술어가 경기 전에 고려 될 수있다이 경우, 일치 절에 조건을 통합하는 방법을 묻는 질문의 정신에 비 답변으로 :
술어가 경기 전에 고려 될 수있다이 경우, 일치 절에 조건을 통합하는 방법을 묻는 질문의 정신에 비 답변으로 :
def assess(n: Int) { println( n compare 10 match { case 0 => "ten" case 1 => "greater than ten" case -1 => "less than ten" }) }
이제 scala.math.Ordering.compare 설명서 (T, T)의 비와 동일한 결과보다 크거나 제로보다 작은 것 만 것을 약속한다. 자바의 필적 #은 compareTo (T)는 스칼라의 유사 지정됩니다. 스칼라의 현재 구현처럼 1과 -1 양과 음의 값을 각각 있지만 하나가 밑으로 변경 구현의 일부 위험없이 이러한 가정을 만들 수 없습니다 사용하는 기존의 될 일이.
-
==============================
3.내 의견으로는 훨씬 더 읽기 경비를 추가하는 것보다 해결책 :
내 의견으로는 훨씬 더 읽기 경비를 추가하는 것보다 해결책 :
(n compare 10).signum match { case -1 => "less than ten" case 0 => "ten" case 1 => "greater than ten" }
노트:
-
==============================
4.위의 답변을 완벽하게 원래의 질문에 대답 우는 모든 몇 가지 추가 정보가 문서 https://docs.scala-lang.org/tour/pattern-matching.html에서 발견 될 수 있지만, 그들은 내 경우에는 적합하지 않았다 그러나이 유래 대답은 구글 I의 첫 번째 제안은 위의 질문 코너 케이스 내 대답을 게시하고자하기 때문이다. 내 질문은 :
위의 답변을 완벽하게 원래의 질문에 대답 우는 모든 몇 가지 추가 정보가 문서 https://docs.scala-lang.org/tour/pattern-matching.html에서 발견 될 수 있지만, 그들은 내 경우에는 적합하지 않았다 그러나이 유래 대답은 구글 I의 첫 번째 제안은 위의 질문 코너 케이스 내 대답을 게시하고자하기 때문이다. 내 질문은 :
어느 의역 할 수있다 :
답은 아래의 코드 예제입니다 :
def drop[A](l: List[A], n: Int): List[A] = l match { case Nil => sys.error("drop on empty list") case xs if n <= 0 => xs case _ :: xs => drop(xs, n-1) }
스칼라 바이올린 링크 : https://scalafiddle.io/sf/G37THif/2 N <= 0 => XS 문을 사용 할 수있는 N 가드 (있는 경우) 문 (함수의 인자) 경우는 케이스 XS를 볼 수 있습니다.
나는이 나 같은 사람을 도움이되기를 바랍니다.
from https://stackoverflow.com/questions/1585395/using-comparison-operators-in-scalas-pattern-matching-system by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 어떻게 스칼라에서 배열을 정렬합니까? (0) | 2019.11.25 |
---|---|
[SCALA] 내가 IntelliJ에있는 스칼라 식의 유형을 보는 방법 (0) | 2019.11.25 |
[SCALA] 어디에서 스칼라 매크로 AST의의 구축에 대해 배울 수 있는가? (0) | 2019.11.25 |
[SCALA] Akka HTTP : 서버 미래의 블록 차단 (0) | 2019.11.25 |
[SCALA] 최고의 스칼라 빌드 시스템은 무엇입니까? [닫은] (0) | 2019.11.25 |