我刚刚发现了一些具有奇怪类名的 scala 代码:
class `This is a cool class` {}
和方法名称:
def `cool method` = {}
我们可以用一个句子作为类名或方法名!
它对于单元测试非常酷且有用:
class UserTest {
def `user can be saved to db` {
// testing
}
}
但是为什么我们可以做到这一点?怎么理解?
我刚刚发现了一些具有奇怪类名的 scala 代码:
class `This is a cool class` {}
和方法名称:
def `cool method` = {}
我们可以用一个句子作为类名或方法名!
它对于单元测试非常酷且有用:
class UserTest {
def `user can be saved to db` {
// testing
}
}
但是为什么我们可以做到这一点?怎么理解?
为了互操作性而存在此功能。如果 Scala 有一个保留字(with
例如),那么您仍然可以通过使用反引号来引用来自其他语言的代码,这些代码将其用作方法或变量或其他任何东西。
由于没有理由禁止几乎任意的字符串,您可以使用几乎任意的字符串。
正如@Rex Kerr回答的那样,此功能用于互操作性。例如,
要调用 java 方法,
Thread.yield()
你需要写
Thread.`yield`()
因为yield
是 scala 中的关键字。
Scala 语言规范:
有三种方法可以形成标识符。首先,标识符可以以字母开头,后面可以跟任意的字母和数字序列。后面可以跟下划线“_”字符和另一个由字母和数字或运算符字符组成的字符串。其次,标识符可以以运算符字符开头,后跟任意序列的运算符字符。前两种形式称为普通标识符。最后,标识符也可以由反引号之间的任意字符串形成(主机系统可能会对标识符合法的字符串施加一些限制)。然后,标识符由除反引号本身之外的所有字符组成。
包裹在`中的字符串是 Scala 中的有效标识符,不仅对类名和方法,对函数和变量也是如此。
对我来说,只是解析器和编译器的构建方式可以实现这一点,因此 Scala 团队实现了它。
我认为编码人员能够为函数提供真实名称而不是getThisIncredibleItem
or是很酷的get_this_other_item
。
感谢您的问题让我在 Scala 中学到了一些新东西!