首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >希望与集合中的ref匹配

希望与集合中的ref匹配
EN

Stack Overflow用户
提问于 2014-06-30 19:05:43
回答 1查看 85关注 0票数 0

我有一个包含参考资料的集合。引用由被调用的函数生成。如果引用不同,那么如何比较预期的集合和实际的集合,即使值是相同的?

这是一个更普遍的问题的特例。如何执行部分匹配,标记某些元素,表明完全匹配是不必要的?

这个问题的要点与测试有关。我有一个函数,返回一个包含引用的表单,我想比较一下它是否符合我的预期。

根据评论意见:

我做过这个..。

代码语言:javascript
复制
(defprotocol Ireference? (reference? [this]))
(extend-type java.lang.Object Ireference? (reference? [this] false))
(extend-type nil Ireference? (reference? [this] false))
(extend-type clojure.lang.Ref Ireference? (reference? [this] true))
(extend-type clojure.lang.Agent Ireference? (reference? [this] true))

(defn ref->str 
   "takes an arbitrary tree and replaces all futures 
   with agnostic strings."
   [form]
   (clojure.walk/postwalk #(if (reference? %) (list 'ref @%) %) form))

做我想做的。

代码语言:javascript
复制
(expect '{:foo (ref :bar) :baz {:zoo (ref :awk)}}
   (ref->str {:foo (ref :bar) :baz {:zoo (ref :awk)}})

这给了我一个匹配。

推荐信?谓词来自我们如何测试某物是否是一个参考?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-30 20:59:48

按照设计,这不能像您所描述的那样在clojure中完成。您可以通过遍历结构并在所有可变类型上调用deref来生成一个值来进行比较,从而获得类似的效果。正如Rich在这段视频中很好地解释的那样(特别是24分钟)

在某些时候,两个值相等是没有意义的。如果语言允许这样做的话,那么它就会失去将精力集中在使用可模仿的值编程上所获得的大部分力量。也许,如果您将集合放在ref中而不是集合中的ref中,那么就更容易进行推理了?

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

https://stackoverflow.com/questions/24497174

复制
相关文章

相似问题

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