在Scala元组赋值中使用unicode变量

时间:2014-04-09 00:50:40

标签: scala unicode naming-conventions

val ©® = 1
val (©, ®) = (1, 2)

第1行在Scalac和REPL中都能正常工作,但在第2行中都有2行扼流圈。

这是一个错误吗?或者是否有一种我缺少的特殊语法?

免责声明:我知道使用非ASCII变量名是一个糟糕的主意。我完全意外地遇到了这个。我发誓,我的代码库并没有充满古怪的符号。请不要诽谤我:)。

1 个答案:

答案 0 :(得分:7)

也许这会有所帮助:

scala> val (x, y) = (1, 2)
x: Int = 1
y: Int = 2

scala> val (X, Y) = (1, 2)
<console>:7: error: not found: value X
       val (X, Y) = (1, 2)
            ^
<console>:7: error: not found: value Y
       val (X, Y) = (1, 2)
               ^

当涉及模式匹配时,unicode被视为大写字符,这意味着,因为它以“大写字母”“开始”,所以它认为您正在与常量进行比较而不是分配值。 / p>

另一个例子:

val © = 1
val ® = 3

(1, 2) match {
  case (©, ®) => "Both match"
  case (_, ®) => "Second matches"
  case (©, _) => "First matches"
  case _      => "None match"
}

结果

res0: java.lang.String = First matches