对于 Clojure,是否有更好地放置 'coll' 和 'n' 的编码约定?
Is there coding convention for better place of 'coll' and 'n' for Clojure?
当我编写 clojure 代码时,我对何时遵循 (func coll n)
格式和 (func n coll)
格式感到困惑。
在 Clojure/core,
使用(take n coll)
,而(nth coll n)
也是右码。此外,还有 (reduce func n coll)
、(get coll n)
和 (drop n coll)
。
在定义这些令人困惑的函数时,参数类型的正确位置是否有任何 rule/convention?或者我应该每次都输入 doc
没有意义吗?
我认为这取决于。也许核心库实际上最能说明这一点。如果你看看你引用的例子:
(take n coll)
(drop n coll)
在这两种情况下,从语义上讲,最重要的是你有多少个元素taking/dropping。
在类似 (get coll n)
的情况下,有一个 left-to-right 语义,即先有一个集合,然后再有一个用于获取的索引。我觉得nth
在这方面也是一样的。请注意,还有其他方法可以从集合中获取索引元素 - 例如,您也可以这样做:
(coll n)
这是可行的,因为 clojure data-structures 像 vector
、hash-map
和 set
都可以充当函数。 IMO,这是一种更令人困惑的方式来完成同样的事情,因为它通常更难阅读,并且没有像 (get coll n)
.
那样清楚地显示意图。
最后,我认为对调用者来说最直观的可能是最好的,并且会让你的代码成为未来用户最 readable/maintainable 的代码。
还有其他的考虑。例如,variable-arity 用例(例如使用 & more
),您需要首先提供所需的参数以防止歧义。然而,我仍然会首先考虑可读性,因为可变参数函数 can 有它们自己的可读性问题。请参阅来自 Stuart Sierra 的精彩 post,其中谈到了这一点。
序列库使用(func ... coll)
格式:map
、filter
、reduce
、&c。介入参数通常是函数而不是数字。
(func coll n)
格式用于 select 集合中的元素,使用 nth
用于 seq
可用集合或 get
(可能是省略)来自关联集合。
当我编写 clojure 代码时,我对何时遵循 (func coll n)
格式和 (func n coll)
格式感到困惑。
在 Clojure/core,
使用(take n coll)
,而(nth coll n)
也是右码。此外,还有 (reduce func n coll)
、(get coll n)
和 (drop n coll)
。
在定义这些令人困惑的函数时,参数类型的正确位置是否有任何 rule/convention?或者我应该每次都输入 doc
没有意义吗?
我认为这取决于。也许核心库实际上最能说明这一点。如果你看看你引用的例子:
(take n coll)
(drop n coll)
在这两种情况下,从语义上讲,最重要的是你有多少个元素taking/dropping。
在类似 (get coll n)
的情况下,有一个 left-to-right 语义,即先有一个集合,然后再有一个用于获取的索引。我觉得nth
在这方面也是一样的。请注意,还有其他方法可以从集合中获取索引元素 - 例如,您也可以这样做:
(coll n)
这是可行的,因为 clojure data-structures 像 vector
、hash-map
和 set
都可以充当函数。 IMO,这是一种更令人困惑的方式来完成同样的事情,因为它通常更难阅读,并且没有像 (get coll n)
.
最后,我认为对调用者来说最直观的可能是最好的,并且会让你的代码成为未来用户最 readable/maintainable 的代码。
还有其他的考虑。例如,variable-arity 用例(例如使用 & more
),您需要首先提供所需的参数以防止歧义。然而,我仍然会首先考虑可读性,因为可变参数函数 can 有它们自己的可读性问题。请参阅来自 Stuart Sierra 的精彩 post,其中谈到了这一点。
序列库使用(func ... coll)
格式:map
、filter
、reduce
、&c。介入参数通常是函数而不是数字。
(func coll n)
格式用于 select 集合中的元素,使用 nth
用于 seq
可用集合或 get
(可能是省略)来自关联集合。