val ©® = 1 val (©,®) = (1,2)
第1行在Scalac和REPL中都能正常工作,但在两者上都是2行扼流圈.
这是一个错误吗?还是有一种我缺少的特殊语法?
免责声明:我知道使用非ASCII变量名称是一个糟糕的主意.我完全意外地遇到了这个.我发誓,我的代码库并没有充满古怪的符号.请不要责骂我:)
解决方法
也许这有助于:
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,2) ^ <console>:7: error: not found: value Y val (X,2) ^
当模式匹配时,unicode被视为大写字符,这意味着,因为它以“大写字母”“开始”,它认为您正在与常量进行比较而不是分配值.
另一个例子:
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