[SCALA] 왜 스칼라에서 패턴 매칭이되지 변수와 함께 작동합니까?
SCALA왜 스칼라에서 패턴 매칭이되지 변수와 함께 작동합니까?
다음과 같은 기능을 가지고 :
def fMatch(s: String) = {
s match {
case "a" => println("It was a")
case _ => println("It was something else")
}
}
이 패턴은 잘 일치 :
scala> fMatch("a")
It was a
scala> fMatch("b")
It was something else
내가 할 수있을 싶은 것은 다음과 같다 :
def mMatch(s: String) = {
val target: String = "a"
s match {
case target => println("It was" + target)
case _ => println("It was something else")
}
}
이것은 다음과 같은 오류를 제공합니다 :
fMatch: (s: String)Unit
<console>:12: error: unreachable code
case _ => println("It was something else")
나는 그 대상이 실제로 당신이 입력이 무엇이든에 할당하고 싶은 이름입니다 생각하기 때문이다 같아요. 두 가지 질문 :
해결법
-
==============================
1.당신이 찾고있는 안정적인 식별자입니다. 스칼라, 이러한 중 하나를 대문자로 시작해야합니다, 또는 역 따옴표로 묶어야.
당신이 찾고있는 안정적인 식별자입니다. 스칼라, 이러한 중 하나를 대문자로 시작해야합니다, 또는 역 따옴표로 묶어야.
이 두 가지 문제에 대한 해결책이 될 것입니다 :
def mMatch(s: String) = { val target: String = "a" s match { case `target` => println("It was" + target) case _ => println("It was something else") } } def mMatch2(s: String) = { val Target: String = "a" s match { case Target => println("It was" + Target) case _ => println("It was something else") } }
실수로 이미 둘러싸 범위에 존재하는 변수를 참조 방지하기 위해, 나는 소문자 패턴이 변수 안정되지 식별자가 될 수 있도록 기본 동작임을 의미가 생각합니다. 당신 만이 대문자로 시작하는 무언가를보고, 또는 다시 틱, 당신이 주위의 범위에서 오는 것을 인식해야 할 때.
from https://stackoverflow.com/questions/7078022/why-does-pattern-matching-in-scala-not-work-with-variables by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라 : 객체 목록에서 중복 제거 (0) | 2019.11.01 |
---|---|
[SCALA] 스칼라의 방법 대 기능 (0) | 2019.11.01 |
[SCALA] flatMap /지도 변환에 대한-이해와 혼란 (0) | 2019.11.01 |
[SCALA] 스칼라 웹 프레임 워크를 사용할 수 있습니까? [닫은] (0) | 2019.11.01 |
[SCALA] 불꽃의 중첩 Dataframe을 flatmap하는 방법 (0) | 2019.11.01 |