복붙노트

[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. ==============================

    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")
        }
    }
    

    실수로 이미 둘러싸 범위에 존재하는 변수를 참조 방지하기 위해, 나는 소문자 패턴이 변수 안정되지 식별자가 될 수 있도록 기본 동작임을 의미가 생각합니다. 당신 만이 대문자로 시작하는 무언가를보고, 또는 다시 틱, 당신이 주위의 범위에서 오는 것을 인식해야 할 때.

  2. from https://stackoverflow.com/questions/7078022/why-does-pattern-matching-in-scala-not-work-with-variables by cc-by-sa and MIT license