代码之家  ›  专栏  ›  技术社区  ›  Joe Holloway

scala中的符号文本有哪些示例用例?

  •  86
  • Joe Holloway  · 技术社区  · 16 年前

    从我在scala上读到的内容来看,符号文本的使用并不是很清楚。有人愿意分享一些现实世界的用途吗?

    是否有特定的Java习语被符号文字覆盖?什么语言有相似的结构?我来自一个Python背景,不确定该语言中是否有类似的内容。

    什么会激励我使用“地狱世界”和“地狱世界”?

    谢谢

    3 回复  |  直到 9 年前
        1
  •  70
  •   Alexey Romanov    10 年前

    在Java术语中,符号是相互交织的字符串。例如,这意味着引用相等比较( eq 在斯卡拉和 == 在Java中,给出与正常的相等比较相同的结果。 = 在斯卡拉和 equals 在爪哇): 'abcd eq 'abcd 将返回true,而 "abcd" eq "abcd" 可能不会,这取决于JVM的突发奇想(好吧,它应该用于文本,而不是一般动态创建的字符串)。

    其他使用符号的语言是lisp(使用 'abcd 像斯卡拉),红宝石( :abcd )Erlang和Prolog( abcd 它们被称为原子而不是符号)。

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

        2
  •  24
  •   Saem    16 年前

    如果您有简单的字符串来表示代码中的方法名,这可能会被传递出去,那么您就不能很好地传递这些信息。这是一种数据/代码边界问题,要画出这条线并不总是容易的,但是如果我们在这个例子中说,那些方法名的代码比它们是数据的代码多,那么我们需要一些东西来清楚地识别它。

    符号文字开始起作用,它只清楚地区分代码中使用的结构的任何旧字符串数据。它就在你想要指出的地方,这不仅仅是一些字符串数据,实际上在某种程度上是代码的一部分。这个想法是类似于您的IDE的东西,它将以不同的方式突出显示出来,并且考虑到工具,您可以在这些工具上重构,而不是进行文本搜索/替换。

    这个 link 讨论得相当好。

        3
  •  1
  •   ChemaCortes    9 年前

    python维护的内部全局表 “实习字符串” 使用此表,解释器可以使用所有变量、函数、模块等的名称进行更快的搜索和优化。您可以使用 intern 功能( sys.intern 在Python 3)。

    此外,Java和Scala自动使用 “实习字符串” 为了更快的搜索。使用scala,您可以使用 实习生 方法强制字符串的实习生,但此过程不适用于所有字符串。符号从被保证被约束中受益,所以一个引用的相等性检查就足以证明相等或不相等。

    推荐文章