首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scala中的有效标识符

Scala中的有效标识符
EN

Stack Overflow用户
提问于 2011-10-05 05:11:22
回答 2查看 15.8K关注 0票数 57

有一件事让我很困惑,那就是知道我可以在方法名和变量名中使用哪些字符和组合。例如

代码语言:javascript
运行
复制
val #^ = 1 // legal
val #  = 1 // illegal
val +  = 1 // legal
val &+ = 1 // legal
val &2 = 1 // illegal
val £2 = 1 // legal
val ¬  = 1 // legal

据我所知,字母数字标识符和运算符标识符是有区别的。除了用下划线(混合标识符)分隔,您可以混合一个或另一个匹配,但不能两者混合。

来自Scala第6.10节的编程,

运算符标识符由一个或多个运算符字符组成。运算符字符是可打印的ASCII字符,例如+、:、?、~或#。 更准确地说,运算符字符属于Unicode一组数学符号(Sm)或其他符号(So),或7位ASCII字符,这些字符不是字母、数字、括号、方括号、大括号、单引号或双引号,也不是下划线、句号、分号、逗号或后勾字符。

因此,我们被禁止使用()[]{}'"_.;,

我在维基百科上查找了Unicode的数学符号,但我发现的数字符号不包括+:?等。

还有,为什么Unicode数学运算符(而不是符号)不算运算符?

EN

回答 2

Stack Overflow用户

发布于 2011-10-05 06:32:00

语言规范。给出了第1章词法语法中的规则(在第3页):

  1. 运算符字符这些字符由所有可打印的ASCII字符\u0020-\u007F组成。上面没有一个集合,数学系统(Sm)和其他符号(So)。

这与您在Scala编程中提取的编程内容基本相同。+不是Unicode的数学符号,但它肯定是上面没有列出的一个ASCII可打印字符 (不是一个字母,包括_或$,一个数字,一个偏执,一个分隔符)。

在你的名单中:

  1. 不是因为字符不是运算符字符(#^是合法的),而是因为它是一个保留字(在第4页),用于类型投影。
  2. &2是非法的,因为您混合了运算符字符&和非运算符字符,数字2。
  3. is 2是合法的,因为is不是运算符字符:它不是一个7位的ASCII,而是8位扩展的ASCII。这不太好,因为$也不是一个(它被认为是一个字母)。
票数 10
EN

Stack Overflow用户

发布于 2021-09-19 10:20:06

使用回拨以转义限制并使用Unicode符号。

代码语言:javascript
运行
复制
val `r→f` = 150
println(`r→f`)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7656937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档