我从Scala上读到的内容并没有立即清楚地使用符号文字.有人愿意分享一些现实世界的用途吗?
符号文字是否包含特定的Java习语?哪些语言有相似的结构?我来自Python背景,不确定那种语言有什么类似的东西.
什么会激励我使用'HelloWorld vs"HelloWorld"?
谢谢
在Java术语中,符号是实习字符串.这意味着,例如,引用相等比较(eq
在Scala和==
Java中)提供与正常相等比较(==
在Scala和equals
Java中)相同的结果:'abcd eq 'abcd
将返回true,而"abcd" eq "abcd"
可能不会,这取决于JVM的奇思妙想(嗯,它应该对于文字,但不是一般动态创建的字符串).
其他使用符号的语言是Lisp(使用'abcd
类似Scala),Ruby(:abcd
),Erlang和Prolog(abcd
;它们被称为原子而不是符号).
当我不关心字符串的结构时,我会使用符号,并将其纯粹用作某事物的名称.例如,如果我有一个表示CD的数据库表,其中包含一个名为"price"的列,我不关心"price"中的第二个字符是"r",还是关于连接列名; 因此,Scala中的数据库库可以合理地使用表和列名称的符号.
如果您在代码中使用简单的字符串表示方法名称,那可能会传递给您,那么您并没有完全正确地传达信息.这是一种数据/代码边界问题,绘制线并不总是那么容易,但是如果我们说在那个例子中那些方法名称的代码多于它们的数据,那么我们想要一些东西来清楚地识别.
Symbol Literal开始发挥作用,它可以清楚地区分任何旧的字符串数据与代码中使用的构造.它只是你想要指出的地方,这不仅仅是一些字符串数据,实际上在某种程度上是代码的一部分.像IDE一样的想法会以不同的方式强调它,并且考虑到工具,你可以对它们进行重构,而不是进行文本搜索/替换.
这个链接很好地讨论了它.