Clojure有一个非常好的析构语法,它既适用于数组也适用于映射。
我经常在这两者之间感到困惑,这意味着我不知道该选哪一个。什么时候应该使用映射作为参数,什么时候应该使用数组?
例如,我计算了以下数据,我想要传递经度和纬度。我可以将其作为{:lat 12 :lng 34}或[12 34]传递,也可以作为两个参数传递。
注意:我不使用两个参数,因为我认为使用coords绑定更好。
然后假设我想添加新的字段(精度、高度、时间戳.),它的优势似乎在地图上:
但是,我常常以函数结束,将一个大的options参数作为映射,并带有一些不相关的子选项。它感觉有点臃肿,即使只有10把钥匙。
那么,什么时候应该使用map,什么时候应该在函数参数中使用数组?在可读性/可扩展性/性能方面,有利/不利因素是什么?而且,在这种情况下,core.match能帮上忙吗?
发布于 2015-08-18 12:58:32
总结一下(虽然可能还有更多)
我想说,基于位置的数据结构,比如向量,很早就达到了极限。特别是当数据结构在很多地方被使用并且比列表更“描述性”的时候。
为什么是地图?
最初,它们很容易使用,并且非常灵活,在开发过程中,它们可以很容易地被交换为与地图一样灵活的记录,但是:
(map->LngLat {...}) (从地图生成LngLat )和(apply ->LngLat [...]) (从向量构造LngLat )
发布于 2015-08-18 12:59:57
正如@birdspider在评论中所指出的那样,记录可以帮助您组织地图的破坏以及许多其他好处。
在如何构造记录方面,您也有相当大的灵活性。您可以使用向量样式的位置参数,也可以将键作为映射传递。
斯图亚特塞拉的博客帖子给出了一个很好的能力概述。
发布于 2015-08-18 13:12:55
另一种选择是使用键:交替键和值的序列作为尾随参数。通过这种方式设置了几个核心功能:
(hash-map 1 2 3 4) ;{1 2, 3 4}
(assoc {1 2} 3 4) ;{3 4, 1 2}您可以将键放到地图中,或者将它们绑定到适合情况的名称上。
https://stackoverflow.com/questions/32070578
复制相似问题