Clojure 中的 :some-parameter 是什么?

3
我正在学习Clojure,我看到了一些带有 :some-value 的代码片段。这是什么意思?我看到了像下面这样的一些代码:
(defn relay [x i]
  (when (:next x)
    (send (:next x) relay i))
  (when (and (zero? i) (:report-queue x))
    (.put (:report-queue x) i))
  x)

如果我打印when文档,找不到:next。
(doc when)
-------------------------
clojure.core/when
([test & body])
Macro
  Evaluates test. If logical true, evaluates body in an implicit do.
nil

:next定义在哪里?

谢谢!

1个回答

4

这些是 关键字(keywords)。如果你不知道它们是什么,要通过谷歌查询了解可能会很困难。

它们的值就是它们自己:

user=> :foo ; evaluates to :foo

它们是独特的、有可能带有命名空间的标识符。这就是为什么它们经常被用作映射中的键:

(def stuff {:a 1
            :b 2})

他们知道如何查找自己(即您可以像调用函数一样调用它们):

(:a stuff) ; 1

这是你示例代码中的使用场景。它们非常好用。


2
要纠正一点-只有在您这样做时它们才是命名空间限定的。您答案中的关键字没有限定。 - Eugene Pakhomov
@EugenePakhomov 是的,我试图不要深入兔子洞。我稍微编辑了一下以提高清晰度。 - Jared Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接