gpt4 book ai didi

clojure - 在 clojure 中,identical 的确切行为是什么?

转载 作者:行者123 更新时间:2023-12-02 07:26:44 24 4
gpt4 key购买 nike

我对 clojureidentical? 的行为感到非常惊讶。


(def a (map identity [:a :b]))
(相同?(rest a)(rest a));错误的

知道为什么 identical? 返回 false 吗?

最佳答案

identical? :

Tests if 2 arguments are the same object

因为 rest 在每次调用时都会创建一个新的 seq 对象,所以它的结果不是相同的?。然而,以下内容是:

(def r (rest (map identity [:a :b])))
(identical? r r) ;; => true

更新:正如@mfikes 所指出的,rest 并不总是创建一个新的序列。它在内部调用 ISeq.more(),这是按序列类型实现的,可能会为列表、向量、惰性序列等产生不同的结果:

(->> [(map identity [:a :b])
(vector :a :b)
(list :a :b)]
(map #(identical? (rest %) (rest %))))
;; => [false false true]

关于clojure - 在 clojure 中,identical 的确切行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27468231/

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