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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scala范围和模式匹配[重复]相关的知识,希望对你有一定的参考价值。

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

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的类型是从外部给出的模式的预期类型。一个特殊情况是通配符模式_,它被视为每次出现时都是一个新变量。

以上是关于scala范围和模式匹配[重复]的主要内容,如果未能解决你的问题,请参考以下文章

模式匹配范围在Scala与Spark udf

(模式)匹配Scala中的字符串[重复]

【Scala】模式匹配和样本类

必会Scala之模式匹配和样例类

Scala 学习 -- 样例类和模式匹配

Scala 学习 -- 样例类和模式匹配