【问题标题】:What does a quote mean in front of a vector in clojure?clojure 中向量前面的引号是什么意思?
【发布时间】:2021-10-30 22:45:57
【问题描述】:

假设您在 clojure 中有以下代码行。你需要什么报价?

(require '[clojure.string :as str])

【问题讨论】:

标签: clojure


【解决方案1】:

引用会阻止评估。默认情况下,所有表达式都在 Clojure 中计算。在表达式前面使用引号会阻止评估。 Clojure 中的大多数表达式都是自求值的(它们对自己求值)。两个主要的例外是符号和列表。 编辑:请参阅下面@amalloy 的评论和回复。

在这种情况下,引号创建了一个文字向量,其第一个元素是符号clojure.string,第二个元素是关键字:as,第三个元素是符号str

如果没有引号,(require [clojure.string :as str]) 将尝试评估符号 clojure.stringstr,并且值将是绑定到这些符号的 var 包含的任何值(或者错误,如果没有绑定)。

这是一个展示差异的示例。假设您有以下两个defs。

(def a 16)
(def b 12)

现在,'[a 14 b] 将计算为向量 [a 14 b]。但是,[a 14 b] 将评估为 [16 14 12]

请参阅 clojure.org 上的 Evaluation 部分,详细了解 Clojure 中符号是如何解析的。

您还可能会发现 quote 的文档以及有关 Clojure 的部分 syntax 也很有帮助。

【讨论】:

  • Nit:我认为说大多数表达式都对自己进行评估是没有用的。事实上,很少对自己进行评估:主要是关键字和数字。最相关的是,向量不会对自身进行评估:如果确实如此,则此答案中不需要引号!相反,评估向量需要评估其元素并将它们放入向量中。
  • 你是对的。我为使用什么短语而不是“表达”而苦苦挣扎。也许“原始元素”会更好。或者我应该完全删除这句话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多