当前位置:  开发笔记 > 编程语言 > 正文

为Clojure提供更好的"coll"和"n"位置的编码约定?

如何解决《为Clojure提供更好的"coll"和"n"位置的编码约定?》经验,为你挑选了1个好方法。

当我编写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).
在定义这些令人困惑的函数时,是否存在适当的参数类型的规则/约定?或者我应该doc每次都没有意义地打字?



1> leeor..:

我认为这取决于.也许核心库实际上最能说明这一点.如果你看一下你引用的例子:

(take n coll) 
(drop n coll)

在这两种情况下,从语义上讲,最重要的是你要采取/放弃的元素数量.

在类似的情况下,(get coll n)在具有要获取的索引之前,存在从左到右的语义,首先具有集合.我认为nth在这方面是一样的.注意,还有其他方法可以从集合中获取索引元素 - 例如,您也可以这样做:

(coll n)

这是有效的,因为clojure数据结构像vector,hash-map并且set都可以充当函数.IMO,这是一种更令人困惑的方式来完成相同的事情,因为它往往更难以阅读,并没有显示意图几乎一样清楚(get coll n).

最后,我认为对调用者来说最直观的感觉可能是最好的,并且会使您的代码在未来的代码用户中最易读/可维护.

还有其他考虑因素.例如,变量arity用例(例如,使用& more),您需要首先需要的参数来防止歧义.我仍然会首先考虑可读性,因为可变参数函数可能带有自己的可读性问题.请参阅Stuart Sierra的这篇精彩文章.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有