欢迎!请查看关于页面,了解更多关于如何使用本站的信息。
从理论角度来看,Map和一元函数之间实际上并没有区别
您对函数实现Map接口有什么看法?这会有用吗?如果已经考虑过这个方案,但最终决定不这么做,理由是什么?我很想了解你们的想法
将事物做成函数是非常有实用性的,因为这是“你可以调用的东西”的主要抽象。将函数转换为映射(数据)的实用性相对较少。你不能像读取/打印数据那样轻松地读取/打印它们,你通常不能与其他数据一起组合,等等。另外,虽然所有映射都可以作为一个查找函数来调用,但不是所有函数都可以作为一个映射来调用,所以这仅适用于一个非常窄的功能集。所以,我认为这没有什么用处,我也看不到从中获得的任何好处。
你试图解决什么问题?
从语义上来说,Map的一些属性是无法映射到函数上的。Map有元素数量,允许枚举包含的所有元素,而这是函数无法完成的。
我看到的另一个缺点是get的不可预测的复杂性。目前在调用Map上的get时,你可以预期操作是相对较快的。对于(get itentity 1000)而言是正确的,但是对于(get #(do (Thread/sleep %) %) 1000)则不成立。我喜欢Clojure的可预测执行时间,比如conj,它保证了它将是O(1),而不会保证元素将被插入到coll的末尾。
get
(get itentity 1000)
(get #(do (Thread/sleep %) %) 1000)
conj