gpt4 book ai didi

types - 在 Clojure 中,为什么有字符串、关键字和符号?

转载 作者:行者123 更新时间:2023-12-03 12:52:31 25 4
gpt4 key购买 nike

我正在学习 Clojure,我无法理解一些语言设计决策:为什么像 Clojure 这样具有不可变字符串的语言也需要关键字和符号数据类型?字符串不能只有可选的 namespace 和元数据以及所有这些东西吗?对于不可变字符串比较也可以是身份基础,不是吗?

或者,由于与 Java 的互操作是 Clojure 必须具备的,因此至少具有 Java String 类型和 KeywordSymbol 数据类型。

我发现这个字符串/关键字/符号“三分法”特别奇怪,因为 Clojure 似乎非常关注“纯度”并在其他方面保持简单。

最佳答案

他们在语言中扮演着非常不同的角色:

  • Vars 用于给事物命名。他们实现 runnable并且可以直接用于调用函数。您不能运行字符串。
  • 关键字本身就是名称,并在 map 中查找自己。它们确实帮助 Clojure 保持其“数据驱动”的风格。字符串没有实现在 map 中查找自身所需的接口(interface)。
  • 字符串只是字符串。他们只做他们需要做的,仅此而已。

  • Clojure 设计的核心原则之一是拥抱您的主机平台,因此在 Clojure 中字符串是 Java 字符串,您永远不需要在某些 convert-to-clojure-string 中包装 Java 字符串。功能以使其进入 Clojure 生态系统。这需要使用未修改的 Java 字符串以及数字类型。关键字和符号是 Clojure 添加的新结构,因此只需让它们以一种有用的方式从 Java 生态系统的其余部分访问即可。符号和关键字只需作为实现接口(interface)的类即可访问。一开始人们认为,为了让一种新语言在 JVM 生态系统中取得成功,它需要完全拥抱 Java 并最大限度地减少“阻抗不匹配”(对于流行语感到抱歉),即使这需要在语言中添加更多内容。没有这个目标就需要。

    编辑:

    您可以通过 def 将符号转换为关键字。把它归于自己
    user> a
    ; Evaluation aborted.
    user> :a
    :a
    user> (def a 'a)
    #'user/a
    user> a
    a
    user>

    关键字评估自己

    关于types - 在 Clojure 中,为什么有字符串、关键字和符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11655080/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com