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