为什么Kotlin不允许使用标识符中的斜杠

Com*_*mbo 4 unicode scala kotlin

反引号中的标识符允许使用Unicode

val `id` = "1"
Run Code Online (Sandbox Code Playgroud)

但是不允许斜线

val `application/json` = "application/json"
Run Code Online (Sandbox Code Playgroud)

在Scala中我们可以有这样的名字.

Tod*_*ell 11

这是JVM限制.从规范部分4.2.2:

方法,字段,局部变量和形式参数的名称存储为非限定名称.非限定名称必须至少包含一个Unicode代码点,并且不得包含任何ASCII字符.; [/(即句号或分号或左方括号或正斜杠).

在Scala中,名字被破坏以避免这种限制,在Kotlin他们不是.


yol*_*ole 8

Kotlin的标识符在Jot类的名称和Kotlin代码生成的方法中按原样使用,没有任何修改.斜杠在JVM名称中具有特殊含义(它将包和类名分开).因此,Kotlin不允许在标识符中使用它.

  • 从托德的回答中可以看出:"在斯卡拉的名字中,为了避免这种限制而被破坏,在科特林他们不是." (4认同)
  • 对不起,我不知道Scala做了什么. (2认同)
  • 仅供参考,这里是Scala如何处理名称错误:https://github.com/scala/scala/blob/2.13.x/src/library/scala/reflect/NameTransformer.scala.如您所见,`/`符号被翻译为`$ div` (2认同)