完全忽略 atoms,以下是对 keywords 的非正式见解
我一般将 keywords 想象成一个具有特殊超级力量的字符串/符号混合体。像 symbols一样,它们受限于某些字符(特别是不允许空格)并且可以具有命名空间::myproject.api/foo
。像字符串一样,它们实际上只是一种数据原始类型。
keywords 的主要超级能力是可以作为函数调用,从关联数据结构(如哈希表)中获取值:(:foo {:foo 42 "bar" 36})
=> 42
和集合:(:foo #{:foo :bar})
=> :foo
。不能使用字符串或数字作为函数。
以下是一个关于 why keywords 为什么存在在 Clojure 中的有帮助的 StackOverflow 回答:https://stackoverflow.com/a/11655615