[SCALA] 어떻게 스칼라의 범위에서 할 수있는 I 패턴 일치?
SCALA어떻게 스칼라의 범위에서 할 수있는 I 패턴 일치?
루비 나는이 쓸 수 있습니다 :
case n
when 0...5 then "less than five"
when 5...10 then "less than ten"
else "a lot"
end
어떻게 스칼라에서이 작업을 수행합니까?
편집 : 바람직 나는 경우에 사용하는 것보다 더 우아하게 그것을하고 싶습니다.
해결법
-
==============================
1.이 가드로 표현 될 수있는 내부 패턴 일치 :
이 가드로 표현 될 수있는 내부 패턴 일치 :
n match { case it if 0 until 5 contains it => "less than five" case it if 5 until 10 contains it => "less than ten" case _ => "a lot" }
-
==============================
2.
class Contains(r: Range) { def unapply(i: Int): Boolean = r contains i } val C1 = new Contains(3 to 10) val C2 = new Contains(20 to 30) scala> 5 match { case C1() => println("C1"); case C2() => println("C2"); case _ => println("none") } C1 scala> 23 match { case C1() => println("C1"); case C2() => println("C2"); case _ => println("none") } C2 scala> 45 match { case C1() => println("C1"); case C2() => println("C2"); case _ => println("none") } none
인스턴스를 포함 참고 초기 캡 이름을 지정해야합니다. 그렇지 않으면 (나도 몰라 탈출이 아니라면, 여기 어렵다), 당신은 백 따옴표로 이름을 부여해야합니다
-
==============================
3.Yardena의 대답 @ 비슷하지만 기본적인 비교를 사용하여 :
Yardena의 대답 @ 비슷하지만 기본적인 비교를 사용하여 :
n match { case i if (i >= 0 && i < 5) => "less than five" case i if (i >= 5 && i < 10) => "less than ten" case _ => "a lot" }
또한 부동 소수점 N 작동
-
==============================
4.동일한 크기의 범위를 들어, 구식 수학와 함께 할 수 있습니다 :
동일한 크기의 범위를 들어, 구식 수학와 함께 할 수 있습니다 :
val a = 11 (a/10) match { case 0 => println (a + " in 0-9") case 1 => println (a + " in 10-19") } 11 in 10-19
그래, 나도 알아 "neccessity없이 분할하지 마!" 그러나 : 나누기 등의 impera!
from https://stackoverflow.com/questions/3160888/how-can-i-pattern-match-on-a-range-in-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 그것은 스칼라에서 자바 8 스타일의 방법 참조를 사용할 수 있습니까? (0) | 2019.11.21 |
---|---|
[SCALA] scala.collection.Seq <문자열>에서 변환 된 java.util.List <문자열> 자바 코드에서 (0) | 2019.11.21 |
[SCALA] 비동기 HTTP 호출로 스파크 작업 (0) | 2019.11.21 |
[SCALA] SparkSQL DataFrame에지도 유형 열에서 키와 값을 얻는 방법 (0) | 2019.11.21 |
[SCALA] 어떻게 스칼라 2.12 또는 2.13의 야간 빌드를 사용하는 SBT를 알 수 있습니까? (0) | 2019.11.21 |