gpt4 book ai didi

clojure - 是否有一种规范的方法来命名变量,否则会导致名称冲突?

转载 作者:行者123 更新时间:2023-12-01 23:22:13 25 4
gpt4 key购买 nike

假设我想命名一个变量 seq , 指的是某种序列。

但是seq已经是 clojure.core 中的函数,所以如果我尝试命名我的变量 seq , seq 的现有含义将被覆盖。

在 Clojure 中是否有一种规范的方式来命名一个变量,否则该变量将与默认变量发生名称冲突?

(例如,在这种情况下,可以使用 my-seq,但我不知道就样式而言这是否是标准的)

最佳答案

没有“标准”的命名方式(参见 the quoterelated joke)。

如果它只是一个事物的函数,我通常只是将它命名为arg。有时,人们使用 x 等缩写表示单个事物,使用 xs 表示事物的序列、列表或向量。

对于小代码片段,缩写为“长”名称的第一个字母通常就足够了。例如,当遍历 map 时,每个 MapEntry 通常被访问为:

(for [[k v] some-map]  ; destructure key/val into k & v
...)

其他时候,您可以在它前面加上一个字母,例如 aseqthe-seq

我经常使用的另一个技巧是添加描述性后缀,例如

name-in
name-full
name-first

(是的,有一个 Clojure 函数 name)。

请注意,如果您确实将其命名为 seq,您将创建一个局部变量来隐藏 clojure.core/seq 函数(它不会被“覆盖”) .如果遮蔽的范围有限并且相关名称清晰适当,我通常只是“让它滑动”(keyval 通常是这种做法的受害者) .对于 name,我也可能会忽略 clojure.core/name 的阴影,因为我很少使用该函数。

请注意,您可以隐藏自己的局部变量。这通常很方便将数据强制转换为特定格式:

(defn foo
[items]
; assume we need a sorted vector with no duplicates
(let [items (vec (sort (set (items))))]
...))

通过隐藏原始的 items 参数,我们确保数据采用所需的形式,而无需提出两个好的描述性名称。当这种技术不太适用时,我通常会退回到后缀技巧并将它们命名为 items-initems 或类似名称。

有时,当需要多种表示形式时,指示类型的后缀很有值(value)。例如:

items
items-set
items-vec

type-str
type-kw
type-sym

还有很多其他的可能性。重点是让读者清楚地了解正在发生的事情,并避免为不知情的人制造陷阱。

如有疑问,请再添加几个字母,以便新读者可以清楚地了解正在发生的事情。

关于clojure - 是否有一种规范的方法来命名变量,否则会导致名称冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67929630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com