scala范围和模式匹配

时间:2018-03-01 08:38:54

标签: scala pattern-matching

Thing(1) and Thing(2)

如果我们使用0到100之间的输入调用ThingCreator(),那么输出会是什么?

答案是Thing(1) through Thing(4),但我不知道{{1}}是怎么回事。如果我们通过50它应该匹配最后一个案例。有人可以解释它是如何工作的吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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的类型是从外部给出的模式的预期类型。一个特例是外卡模式_,它被视为每次出现时都是一个新变量。