Scala中的模式匹配与Caps变量

时间:2014-10-11 21:52:06

标签: scala

当我在Scala中使用以caps开头的变量进行模式匹配时,它会产生编译错误。 这是一个样式问题,我不明白为什么这是编译错误。

以下代码段报告"错误:未找到:值名称"。

val pair = Tuple2(1,"abc") val (key, Name) = pair

但是,以下工作:

val pair = Tuple2(1,"abc") val (key, name) = pair

2 个答案:

答案 0 :(得分:4)

模式表达式使用每个标识符的第一个字母的大小写来确定它是新的val声明还是对现有val的引用。这是Scala语法的一个丑陋的怪癖(尽管如果你坚持既定的命名约定,你就不会碰到它)。

答案 1 :(得分:0)

这不是风格,虽然很时尚。

scala> val pair = Tuple2(1,"abc"); val (key, Name) = pair
<console>:7: error: not found: value Name
       val pair = Tuple2(1,"abc"); val (key, Name) = pair
                                             ^

scala> val pair = Tuple2(1,"abc"); val Name = "abc" ; val (key, Name) = pair
pair: (Int, String) = (1,abc)
Name: String = abc
key: Int = 1

模式是一种模式:

scala> (1,"abc") match { case (key, Name) => key }
res0: Int = 1

scala> (1,"abc") match { case (key, Fame) => key }
<console>:11: error: not found: value Fame
              (1,"abc") match { case (key, Fame) => key }
                                           ^

但出于某种原因,这是一个很好的。

http://www.scala-lang.org/files/archive/spec/2.11/08-pattern-matching.html#variable-patterns