欢迎!请参阅关于页面以了解更多关于该功能的信息。
亲爱的Clojurians!“keyword”和“atom”有什么区别?对不起,我是一个完完全全的新手 :-)
关键字是符号标识符,它们的值为自身。它们通常用作映射的键来命名属性或作为枚举值。
例如,在映射{:first-name "SpongeBob", :last-name "SquarePants"}中有两个条目,使用了关键字:first-name和:last-name作为键。
{:first-name "SpongeBob", :last-name "SquarePants"}
:first-name
:last-name
参见:https://clojure.org/reference/data_structures#Keywords
原子实际上是有一个小盒,可以存储一个值,这个值可以通过应用一个函数来原子地更新。例如,你可以从原子制作一个计数器,然后增加它(如果需要,可以从多个线程安全地增加)。
(def counter (atom 0)) (swap! counter inc) ;; increment counter @counter ;; read counter: 1
参见:https://clojure.org/reference/atoms
完全不提原子,这里对关键字有一个非正式的看法
我喜欢把这些观念上的关键字想象成有特殊能力的字符串/符号混合体。像符号一样,它们受到某些字符的限制(值得关注的是不允许有空格)并且可以分区命名:`:myproject.api/foo`。像字符串一样,它们实际上是数据原语。
关键字的主要能力是可以作为函数调用从关联数据结构(如哈希表)和集合中获取值:`(:foo {:foo 42 "bar" 36})` => `42` 和 `(:foo #{:foo :bar})` => `:foo`。字符串或数字不能作为函数使用。
这里有关于为什么Clojure存在关键字的有用StackOverflow答案:https://stackoverflow.com/a/11655615