2024年的Clojure状态调查!中分享你的想法。

欢迎!有关如何工作的更多信息,请参阅关于页面。

0
语法和读取器

亲爱的Clojurians!
“keyword”和“atom”有什么区别?
抱歉,我是一个彻底的新手 :-)

2 个答案

+2

被选为最佳答案
 
最佳答案

Keywords是符号标识符,其值等于自身。它们通常用作映射中的键,以命名属性或作为枚举值。

例如,在映射{: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

那么…原子是可变的变量吗?
是的,原子提供了受控的可变性——在应用函数更新前值时线程安全。请参阅参考资料和代理 – https://clojure.org/reference/refshttps://clojure.org/reference/agents
谢谢! :-)
0

完全不考虑原子,这里有一个关于关键词的非正式观点

我喜欢从概念上把关键词想成一种具有特殊功能銜接字符串/符号。像符号一样,它们被限制为某些字符(特别是没有空格),并可以进行名称空间化:`:myproject.api/foo`。像字符串一样,它们实际上只是一个数据原语。

关键词的主要超能力是它们可以用作函数来从关联数据结构(如哈希表)中获取值:`(:foo {:foo 42 "bar" 36})` => `42` 和集合中:`(:foo #{:foo :bar})` => `:foo`。你不能使用字符串或数字作为函数。

这是关于Clojure中为什么存在关键词的一个有用的StackOverflow回答:https://stackoverflow.com/a/11655615

by
谢谢! :-)
...