没有“标准”的命名方式(参见the quote 和related joke)。
如果它只是一个东西的功能,我通常只是将它命名为arg。有时,人们使用诸如 x 之类的缩写来表示单个事物,而 xs 则用于事物的序列、列表或向量。
对于小的代码片段,缩写为“长”名称的第一个字母通常就足够了。例如,在遍历地图时,每个 MapEntry 经常被访问为:
(for [[k v] some-map] ; destructure key/val into k & v
...)
其他时候,您可以在其前面加上 aseq 或 the-seq 之类的字母。
我经常使用的另一个技巧是添加描述性后缀,例如
name-in
name-full
name-first
(是的,有一个 Clojure 函数 name)。
请注意,如果您确实将其命名为seq,您将创建一个隐藏clojure.core/seq 函数的局部变量(它不会被“覆盖”)。如果阴影的范围有限并且所讨论的名称清晰且适当(key 和 val 通常是这种做法的受害者),我通常只是“让它滑动”。对于name,我也可能会忽略clojure.core/name 的阴影,因为我很少使用该功能。
请注意,您可以隐藏自己的局部变量。这通常可以方便地将数据强制转换为特定格式:
(defn foo
[items]
; assume we need a sorted vector with no duplicates
(let [items (vec (sort (set (items))))]
...))
通过隐藏原始 items 参数,我们确保数据处于所需的形式,而无需提出两个好的描述性名称。当这种技术不太适合时,我经常会退回到后缀技巧,只需将它们命名为 items-in 和 items 或类似名称。
有时,当需要多种表示形式时,指示类型的后缀很有价值。例如:
items
items-set
items-vec
type-str
type-kw
type-sym
还有很多其他的可能性。重点是让读者清楚地知道发生了什么,并避免为不知情的人制造陷阱。
如有疑问,请添加更多字母,以便新读者清楚发生了什么。