这个问题在这里已有答案:
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它应该匹配最后一个案例。有人能解释它是如何工作的吗?
case x
,其中x
是任何小写标识符,匹配任何值并将其分配给新创建的名为x
的变量。
无论是否已存在具有相同名称的变量,都是如此。
这是因为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的类型是从外部给出的模式的预期类型。一个特殊情况是通配符模式_,它被视为每次出现时都是一个新变量。