首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在clojure中,为什么空列表的类型与非空列表的类型不同?

在clojure中,为什么空列表的类型与非空列表的类型不同?
EN

Stack Overflow用户
提问于 2013-02-16 18:33:04
回答 1查看 201关注 0票数 4

我想判断两个值是否具有相同的类型,但我发现空列表的类型是clojure.lang.PersistentList$EmptyList而不是clojure.lang.PersistentList

代码语言:javascript
复制
user=> (def la '())
#'user/la
user=> (def lb '(1 2))
#'user/lb
user=> (def t (map type [la lb]))
#'user/t
user=> t
(clojure.lang.PersistentList$EmptyList clojure.lang.PersistentList)
user=> (apply = t)
false
user=> 

所以,我想知道为什么空列表的类型不同于非空列表的类型,以及判断两个对象是否属于同一类型的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-16 21:16:34

Clojure不要依赖于数据结构的具体类型。它们是没有文档记录的实现细节,您不能保证它们在Clojure的未来版本中不会更改。

依赖抽象(例如,由IPersistentListISeq接口定义的抽象)的要安全得多。这些不太可能以破坏代码的方式进行更改(我的理解是,Rich Hickey在抽象方面非常注重向后兼容性。如果你依赖一个具体的实现,我相信他会说,如果事情坏了,那是你自己的错)

但对于更好的,您应该使用clojure.core中的函数,如seq?list?,具体取决于您想要检测的是什么。它们不仅可能在很长一段时间内保持向后兼容性,而且还有机会在Clojure的非JVM版本(例如ClojureScript)上正确工作。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14909312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档