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

符号文字的使用从我在Scala上读过的内容中并不是很清楚。 有人愿意分享一些真实世界的用途吗?

是否有一个特定的Java成语被符号文字覆盖? 哪些语言有相似的结构? 我来自Python的背景,不知道有什么类似的语言。

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

谢谢

用Java术语来说,符号是internedstring。 这意味着,例如,引用相等比较(Scala中的eq和Java中的== )给出了与正常相等比较相同的结果( ==在Scala中, equals在Java中): 'abcd eq 'abcd将返回true,而"abcd" eq "abcd"可能不会,这取决于JVM的奇思妙想(当然,它应该是文字的,而不是通常dynamic创build的string)。

其他使用符号的语言是Lisp(它使用像Scala一样'abcd ),Ruby( :abcd ),Erlang和Prolog( abcd ;它们被称为primefaces而不是符号)。

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

如果你在代码中有简单的string表示方法名称,那么可能会被传递,你不能适当地传达一些东西。 这就是数据/代码边界问题,绘制线并不总是很容易,但是如果我们要说在那个例子中,那些方法名比数据更多的代码,那么我们想要清楚的标识出。

符号文字发挥作用,它清楚地将任何旧的string数据与代码中使用的构造区分开来。 这只是在那里你想表明,这不只是一些string数据,但实际上在某种程度上代码的一部分。 像IDE这样的东西会突出显示它的不同之处,并给予工具,你可以重构这些,而不是做文本search/replace。

这个链接很好地讨论它。

Python使用所有variables,函数,模块等的名称来获取“interned strings”的内部全局表。通过这个表,解释器可以进行更快的search和优化。 你可以用intern函数强制这个进程(python3中的sys.intern )。

此外,Java和Scala会自动使用“interned strings”来加速search。 用scala,你可以使用intern方法强制一个string的实习生,但是这个过程不适用于所有的string。 符号受益于被保证实施,所以一个参考平等检查就足以certificate平等或不平等。