10

我刚刚发现了一些具有奇怪类名的 scala 代码:

 class `This is a cool class` {}

和方法名称:

 def `cool method` = {}

我们可以用一个句子作为类名或方法名!

它对于单元测试非常酷且有用:

class UserTest {
   def `user can be saved to db` {
      // testing
   }
}

但是为什么我们可以做到这一点?怎么理解?

4

5 回答 5

15

为了互操作性而存在此功能。如果 Scala 有一个保留字(with例如),那么您仍然可以通过使用反引号来引用来自其他语言的代码,这些代码将其用作方法或变量或其他任何东西。

由于没有理由禁止几乎任意的字符串,您可以使用几乎任意的字符串。

于 2012-05-29T11:37:00.790 回答
7

正如@Rex Kerr回答的那样,此功能用于互操作性。例如,

要调用 java 方法,

Thread.yield()

你需要写

Thread.`yield`()

因为yield是 scala 中的关键字。

于 2012-05-29T11:49:45.000 回答
5

Scala 语言规范:

有三种方法可以形成标识符。首先,标识符可以以字母开头,后面可以跟任意的字母和数字序列。后面可以跟下划线“_”字符和另一个由字母和数字或运算符字符组成的字符串。其次,标识符可以以运算符字符开头,后跟任意序列的运算符字符。前两种形式称为普通标识符。最后,标识符也可以由反引号之间的任意字符串形成(主机系统可能会对标识符合法的字符串施加一些限制)。然后,标识符由除反引号本身之外的所有字符组成。

于 2012-05-29T11:35:28.683 回答
2

包裹在`中的字符串是 Scala 中的有效标识符,不仅对类名和方法,对函数和变量也是如此。

于 2012-05-29T11:30:28.830 回答
1

对我来说,只是解析器和编译器的构建方式可以实现这一点,因此 Scala 团队实现了它。

我认为编码人员能够为函数提供真实名称而不是getThisIncredibleItemor是很酷的get_this_other_item

感谢您的问题让我在 Scala 中学到了一些新东西!

于 2012-05-29T11:33:10.910 回答