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

欢迎!有关如何使用的更多信息,请参阅关于页面

+10 投票
Clojure
编辑

对此有任何“官方”指导吗?

Clojure.spec 使用了这两个。

(s/def ::foo (s/keys :req [::bar]))

我现在疑惑的当前用例是我正在开发的内部 API。顶层键在 API 响应中应该是合格的是很明显的。关于值位置中的关键字呢?

{:my.api.person/name "Imre"
 :my.api/result-type :success ;; :my.api.result/success perhaps?
 :my.api/warnings [:quota-exceeded :my.api.quota/exceeded]}

编辑:在Slack 讨论中我首次提出这个问题。

1 个答案

+3 投票

选中
 
最佳答案

关于这方面的 Spec 的指导最好在https://clojure.org/about/spec#_global_namespaced_names_are_more_important 中找到 - Spec 强烈建议当数据可能与其他人共享,或与其他库或来源的数据组合时,使用合格属性规范名称作为 map 键。

然而,这并非唯一关心的问题 —— 我们还关注可读性、易写性等。在某些情况下,一个属性(或值)可能仅在某个上下文中存在,因此无需资格说明,可以由容器推断。在上面的例子中,我不确定有资格说明该值的价值有多大——它可能只在其属性(已通过资格说明)的上下文中进行设置/比较。

...