2014-10-11 56 views
1

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

以下片段报告“错误:找不到:值名称”。

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

但是,下面的工作:

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

+0

[如何将匹配模式匹配成大写变量?](http://stackoverflow.com/questions/12636972/how-to-pattern-match-into-an-uppercase-variable) – 2014-10-11 22:52:59

回答

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

4

模式表达式使用每个标识符的第一个字母的情况下,以确定它是否是一个新VAL声明或现有VAL的引用。这是Scala语法的一个丑陋怪癖(尽管如果你坚持既定的命名约定,你就不会碰到它)。