当我在Scala中使用以caps开头的变量进行模式匹配时,它会产生编译错误。 这是一个样式问题,我不明白为什么这是编译错误。
以下代码段报告"错误:未找到:值名称"。
val pair = Tuple2(1,"abc")
val (key, Name) = pair
但是,以下工作:
val pair = Tuple2(1,"abc")
val (key, name) = pair
答案 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