scala范围和模式匹配[重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

case class Thing(n: Int)
def ThingCreator(c:Int): Thing = 
{
    val a = 10
    val b = 20
    c match {
        case 0 => Thing(1)
        case a => Thing(2)
        case b => Thing(3)
        case _ => Thing(4)
    }
}

如果我们调用ThingCreator()输入范围从0到100,那么输出会是什么?

答案是作为Thing(1) and Thing(2),但我不知道它是如何不是Thing(1) through Thing(4)。如果我们通过50它应该匹配最后一个案例。有人能解释它是如何工作的吗?

scala pattern-matching
2个回答
0
投票

case x,其中x是任何小写标识符,匹配任何值并将其分配给新创建的名为x的变量。

无论是否已存在具有相同名称的变量,都是如此。


0
投票

这是因为Scala编译器永远不会低于你的匹配案例模式中的case a => Thing(2)

Scala编译器应该发出警告

patterns after a variable pattern cannot match (SLS 8.1.1)
    case a => Thing(2)
         ^

unreachable code
case b => Thing(3)
               ^

SLS 8.1.1指出

变量模式x是一个简单的标识符,以小写字母开头。它匹配任何值,并将变量名称绑定到该值。 x的类型是从外部给出的模式的预期类型。一个特殊情况是通配符模式_,它被视为每次出现时都是一个新变量。

© www.soinside.com 2019 - 2024. All rights reserved.