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

欢迎!请查阅关于页面以了解更多关于此页面的信息。

0
语法和读取器

亲爱的Clojurians,你好!
“keyword”与“atom”有什么区别?
抱歉,我是一名完全的新手 :-)

2个答案

+2

被选择
 
最佳答案

关键字是求值后等于它们的符号标识符。它们通常用作映射中的键,以命名属性或作为枚举值。

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

那么,原子(Atom)是一个可变的变量吗?
是的,原子提供了可控的可变韧性 - 更新时使用函数应用于前一个值是线程安全的。也可以参考“引用”和“代理” —— https://clojure.org/reference/refshttps://clojure.org/reference/agents
谢谢!  :-)
0

完全忽略原子,以下是对键值(Keyword)的非正式看法

我喜欢把键值看作是一个具有特殊功能的字符串/符号混合体。像符号一样,它们被限制在某些字符(特别是没有空格)中,并且可以命名空间::myproject.api/foo。像字符串一样,它们实际上是数据原语。

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

以下是一个有关于为什么关键字存在于Clojure中的有用的StackOverflow答案:https://stackoverflow.com/a/11655615

谢谢!  :-)
...