【发布时间】:2016-09-22 17:09:05
【问题描述】:
user=> (rseq [:a :b])
(:b :a)
user=> (rseq (rseq [:a :b]))
ClassCastException clojure.lang.APersistentVector$RSeq cannot be cast to
clojure.lang.Reversible clojure.core/rseq (core.clj:1532)
为什么rseq 不能接受之前调用rseq 的结果?
我在文档字符串中读到参数必须是(实际上,“可以是”)向量或排序映射,上面显示它不能是RSeq,所以我已经知道了。我想知道的是:这种限制有充分的理由吗?这只是一个疏忽,还是这种限制提供了一些重要的好处?
此外,除了从不调用rseq 之外,是否有一个方便的解决方法?很难知道,当您从一个函数返回 RSeq 时,其他地方的其他函数是否会在其上调用 rseq。
我之所以这么问是因为看到我的代码以如此令人惊讶的原因抛出异常令人沮丧s。如果我知道为什么这样做是有道理的,我可能不太可能犯这种错误和类似的错误。
【问题讨论】:
标签: clojure sequence reverse rationale