gpt4 book ai didi

clojure - ILookup 有什么用,为什么它不扩展 IFn?

转载 作者:行者123 更新时间:2023-12-04 18:04:43 25 4
gpt4 key购买 nike

map 似乎两者兼而有之

({:a 1} :a)

(因为它是一个 IFn)和

(:a {:a 1})

因为它是一个 ILookup。此外,RT/getFrom 允许以类似的方式通过索引查找字符串和数组,通过键查找 Java 映射,通过成员查找 IPersistentSets

除了可以在其上使用关键字之外,ILookup 还为您提供了什么?为什么这比 IFn 更好?

特别是,datomic.EntityMap 似乎是一个 ILookup 而不是 IFn。

最佳答案

clojure.lang.ILookup 用于可以查找键(任意类型,不一定是关键字)的东西。 clojure.lang.IFn 适用于可以作为函数调用的事物。仅根据这些使命陈述,尚不清楚它们之间是否存在任何内在联系。

此外,既是ILookup又是IFn的事物并不总是在同样的方法:

(.valAt [0 1 2] 123)
;= nil

([0 1 2] 123)
;; throws IndexOutOfBoundsException

上述行为的原因是 invoke 像向量上的二进制 nth 一样工作,而 valAt 的目的是实现语义获取

(对于向量上的调用 应该做什么的主题可能存在分歧,但那是一个单独的讨论。)

这并不意味着 ILookupIFn“更好”——它只是一个具有不同目的的独立接口(interface)。在它们之间引入 extends 关系是有必要的,我不确定此时这样做会有什么好处。

关于clojure - ILookup 有什么用,为什么它不扩展 IFn?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29199524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com