Scala 中的有效标识符字符

2024-03-26

我觉得很困惑的一件事是知道我可以在方法和变量名称中使用哪些字符和组合。例如

val #^ = 1 // legal
val #  = 1 // illegal
val +  = 1 // legal
val &+ = 1 // legal
val &2 = 1 // illegal
val £2 = 1 // legal
val ¬  = 1 // legal

据我了解,两者之间是有区别的字母数字标识符 and 操作符标识符。您可以混合匹配其中之一,但不能同时混合两者,除非用下划线分隔(混合标识符).

From Scala 编程第 6.10 节,

操作符标识符由一个或多个操作符字符组成。 操作符是可打印的 ASCII 字符,例如 +、:、?、~ 或者 #。

更准确地说,操作符字符属于 Unicode 集 数学符号(Sm)或其他符号(So),或7位 非字母、数字、括号、正方形的 ASCII 字符 方括号、大括号、单引号或双引号或下划线, 句号、分号、逗号或反勾号字符。

所以我们被排除在使用之外()[]{}'"_.;, and `

我查了一下 Unicode 数学符号维基百科 http://en.wikipedia.org/wiki/Mathematical_operators_and_symbols_in_Unicode,但我找到的不包括+, :, ?等等。是否有关于操作符字符的明确列表?

另外,有什么想法为什么 Unicode 数学运算符(而不是符号)不算作运算符吗?


工作从EBNF https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form规范中的语法:

upper ::= ‘A’ | ... | ‘Z’ | ‘$’ | ‘_’ and Unicode category Lu
lower ::= ‘a’ | ... | ‘z’ and Unicode category Ll
letter ::= upper | lower and Unicode categories Lo, Lt, Nl
digit ::= ‘0’ | ... | ‘9’
opchar ::= “all other characters in \u0020-007F and Unicode
            categories Sm, So except parentheses ([]) and periods”

但也要考虑到词法语法的一开始就定义了:

Parentheses ‘(’ | ‘)’ | ‘[’ | ‘]’ | ‘{’ | ‘}’.
Delimiter characters ‘‘’ | ‘’’ | ‘"’ | ‘.’ | ‘;’ | ‘,’

这是我的想法。在范围内采用消除法进行工作\u0020-007F,消除字母、数字、括号和分隔符,我们有opchar... (击鼓):

! # % & * + - / : < = > ? @ \ ^ | ~ 并且Sm http://www.fileformat.info/info/unicode/category/Sm/list.htm and So http://www.fileformat.info/info/unicode/category/So/list.htm- 括号和句点除外。

总之,这里有一些突出显示所有情况的有效示例 - 请注意\ in the REPL https://en.wikipedia.org/wiki/Read-eval-print_loop;我不得不逃跑\\:

val !#%&*+-/:<=>?@\^|~ = 1 // All simple opchars
val simpleName = 1
val withDigitsAndUnderscores_ab_12_ab12 = 1
val wordEndingInOpChars_!#%&*+-/:<=>?@\^|~ = 1
val !^©® = 1 // opchars and symbols
val abcαβγ_!^©® = 1 // Mixing Unicode letters and symbols

Note 1:

我找到了这个统一码类别索引 http://www.fileformat.info/info/unicode/category/index.htm弄清楚Lu, Ll, Lo, Lt, Nl:

  • 卢(大写字母)
  • Ll(小写字母)
  • Lo(其他字母)
  • Lt(标题)
  • Nl(类似罗马数字的字母数字)
  • Sm(符号数学)
  • 所以(符号其他)

Note 2:

val #^ = 1 // legal   - two opchars
val #  = 1 // illegal - reserved word like class or => or @
val +  = 1 // legal   - opchar
val &+ = 1 // legal   - two opchars
val &2 = 1 // illegal - opchar and letter do not mix arbitrarily
val £2 = 1 // working - £ is part of Sc (Symbol currency) - undefined by spec
val ¬  = 1 // legal   - part of Sm

Note 3:

其他看起来像运算符的保留字:_ : = => <- <: <% >: # @并且\u21D2 ⇒ and \u2190

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala 中的有效标识符字符 的相关文章

随机推荐

  • 如何更新 C# Windows 控制台应用程序中的当前行?

    在 C 中构建 Windows 控制台应用程序时 是否可以写入控制台而无需扩展当前行或转到新行 例如 如果我想显示一个百分比来表示进程距离完成的程度 我只想更新与光标相同的行上的值 而不必将每个百分比放在新行上 这可以通过 标准 C 控制台
  • 如何访问 React Redux 中的存储状态?

    我只是在制作一个简单的应用程序来学习异步与 redux 我已经让一切正常工作 现在我只想在网页上显示实际状态 现在 我如何在渲染方法中实际访问商店的状态 这是我的代码 所有内容都在一页中 因为我刚刚学习 const initialState
  • 从 c++ 为 android (arm) 生成一个 python 库 - 也许用 swig?

    我想在我的项目中包含一个 C 库kivy https kivy org 蟒蛇应用程序 可以自动执行此操作swig https swig org Doc4 1 Python html and 迪斯图尔斯 https docs python o
  • SQL Server 输出子句

    我有点困惑为什么我似乎无法使用下面的语句获得插入行的 新身份 SCOPE IDENTITY 只是返回 null declare WorkRequestQueueID int declare LastException nvarchar MA
  • 图像的色调效果 - iOS

    我只是想知道 是否有可能为图像制作色调效果 但不使用OpenGl ES 最好使用CALayer 我花了一些时间寻找答案 但仍然一无所获 tnx 您是在谈论对图像进行着色吗 一种快速方法 尽管可能不是最好的方法 为此您需要一个自定义解决方案
  • 从 GSL 库中获取 C gsl_fit_linear() 函数中线性回归的 p 值

    我正在尝试用 C 语言重现 R 中的一些代码 因此我尝试使用以下函数来拟合线性回归gsl fit linear 功能 在 R 中 我将使用 lm 函数 它使用以下代码返回拟合的 p 值 lmAvgs lt lm c 1 23 11 432
  • 使所有新目录具有777权限

    我有一个脚本 运行时会在其中创建一个目录 home test 然后在其中写入一些文件 当我运行这个脚本时 它工作得很好 但是 当我从 perl 脚本调用它时 ret home testscript py 它没有权限 因此无法创建该文件夹 或
  • 有没有可用于将 32 位/64 位可执行文件打包在一起的工具? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我真的很喜欢 SysInternals 实用程序 例如 Process Explorer 处理 64 位兼容性的方式 看起来 32 位可执
  • 在 Unix 上连接文本文件中的多个字段

    我该怎么做 File1看起来像这样 foo 1 scaf 3 bar 2 scaf 3 3 File2看起来像这样 foo 1 scaf 4 5 foo 1 boo 2 3 bar 2 scaf 1 00 我想做的是找到同时出现的线条Fil
  • 用 NaN 对矩阵进行排序,提取索引向量并将 NaN 移到末尾

    mockup 3 5 nan 2 4 nan 10 nan 如何在忽略 NaN 的情况下按降序对这个向量进行排序 所得向量的长度必须与mockup 即我需要将所有 NaN 放在末尾 结果应该是这样的 mockupSorted 10 5 4
  • 远程编辑谷歌文档

    我正在尝试向我的网站添加一项功能 如下所示 单击按钮会将文本附加到 Google 文档 显然 我需要在驱动器中创建一个 Apps 脚本 问题是如何从我的网站触发 Apps 脚本 您可以假设我是驱动器 文档的所有者 因此有权以我喜欢的任何方式
  • 在 Swift 中将字符串转换为 CGFloat

    我是 Swift 新手 如何将字符串转换为 CGFloat I tried var fl CGFloat str as CGFloat var fl CGFloat CGFloat str var fl CGFloat CGFloat st
  • 弃用离线访问权限后在 Facebook 上注销/切换用户

    通过脸书弃用离线访问权限 https developers facebook com roadmap offline access removal 5 月 1 日起 Web 应用程序可以轻松延长 OAuth 访问令牌的持续时间 60 天 但
  • JavaScript 中的 setTimeout 是否接受真实(浮点)延迟时间_

    我只是在看JavaScript 计时事件 http www w3schools com js js timing asp 那里说 第二个参数表示从现在开始多少毫秒后您要执行第一个参数 现在 我知道在 JavaScript 中 浮点数和整数都
  • 如果左侧包含 null 并且右侧包含值,则在 sql 中向左移动单元格

    在 Sql 中 我得到如下格式的结果 我总共有 6 列 第一行第 6 列包含该值 第二行第 5 和第 6 列包含该值 但如果前一列不包含该值 我需要检查每个单元格 这意味着我需要在第一列中包含该值 实际结果 a b c d e f 1 1
  • Nodejs、multer、aws S3

    如何应用 uuid 和日期 以便存储在数据库中的文件名和存储在 S3 存储桶中的文件名相同 在当前的实现中 即使帖子是在几小时后发布的 uuid 和日期也始终相同 有人可以帮忙吗 真的很感激 const s3 new AWS S3 acce
  • 基于定义的时间间隔(bin)的时间序列平均值

    这是我的数据集的示例 我想每 10 秒根据时间 即 ts 计算一次 bin 平均值 您能否提供一些提示以便我可以继续 就我而言 我想平均每 10 秒的时间 ts 和 Var 比如我会得到Var和ts从0到10秒的平均值 我将得到另一个 Va
  • 锐化图像以检测纸上印有“X”对象的边缘/线条

    我正在使用 python 和 opencv 我的目标是检测用树莓派相机拍摄的图像中的 X 形碎片 该项目是我们预先打印井字游戏板 并且每次将新棋子放置到板上时都必须对板进行成像 带有墨水印章 然后输出表明什么类型的棋子 如果有的话 位于井字
  • awk -cut 如何删除带有字段分隔符的第二列

    我有一个 csv 文件 其中的数据如下 o 022344527 o lonyfoe o Joe o Joe o Otieno 我正在尝试删除第二列 Output o lonyfoe o Joe o Joe o Otieno 有任何想法吗 这
  • Scala 中的有效标识符字符

    我觉得很困惑的一件事是知道我可以在方法和变量名称中使用哪些字符和组合 例如 val 1 legal val 1 illegal val 1 legal val 1 legal val 2 1 illegal val 2 1 legal va