Scala中符号文字的一些示例用例是什么?

时间:2009-04-23 04:11:51

标签: syntax scala

我从Scala上读到的内容并没有立即清楚地使用符号文字。有人愿意分享一些现实世界的用途吗?

符号文字是否包含特定的Java习惯用法?哪些语言有相似的结构?我来自Python背景,不确定那种语言有什么类似的东西。

什么会激励我使用'HelloWorld vs“HelloWorld”?

由于

3 个答案:

答案 0 :(得分:72)

在Java术语中,符号是实习字符串。这意味着,例如,引用相等性比较(Scala中的eq和Java中的==)与正常的相等比较({1}}在Scala和==中的结果相同。 Java):equals将返回true,而'abcd eq 'abcd可能不会,这取决于JVM的奇思妙想(好吧,它应该用于文字,但不适用于一般动态创建的字符串)。

使用符号的其他语言是Lisp(使用{1}},如Scala),Ruby("abcd" eq "abcd"),Erlang和Prolog('abcd;它们被称为原子而不是符号)。

当我不关心字符串的结构时,我会使用符号,并将其纯粹用作某事物的名称。例如,如果我有一个表示CD的数据库表,其中包含一个名为“price”的列,我不关心“price”中的第二个字符是“r”,还是关于连接列名;因此,Scala中的数据库库可以合理地使用表和列名称的符号。

答案 1 :(得分:25)

如果你在代码中有简单的字符串表示方法名称,那可能会被传递,你就不能正确传达事物了。这是一种数据/代码边界问题,绘制线并不总是那么容易,但是如果我们说在那个例子中那些方法名称的代码多于它们的数据,那么我们需要一些东西来清楚地识别

Symbol Literal开始发挥作用,它可以清楚地区分任何旧字符串数据与代码中使用的构造。它只是你想要指出的地方,这不仅仅是一些字符串数据,实际上在某种程度上是代码的一部分。像你的IDE这样的想法会以不同的方式强调它,并且考虑到工具,你可以重构这些,而不是进行文本搜索/替换。

link对此进行了很好的讨论。

答案 2 :(得分:1)

注意:Symbols将被弃用,然后在Scala 3(dotty)中删除。

参考:http://dotty.epfl.ch/docs/reference/dropped-features/symlits.html

因此,我个人建议不再使用Symbols(至少在新的Scala代码中)。如文档所述:

不再支持符号文字

建议改用纯文本字符串[...]