差异
从管道中删除提供的列表的内容
ruby…
[1,1,2,2,3,4] - [1,3] # => [2, 2, 4]
clojure…
(remove #{1 3} [1 1 2 2 3 4]) ;; => (2 2 4)
作为运算符,差异主要用于 嵌套运算符表达式 的上下文中,但在管道中也很有用。
严格来说,如果您有 过滤器,则不需要它,因为您始终可以使用适当配置的过滤器来删除给定列表的元素。(事实上,这就是 clojure 示例实际上正在做的事情,因为 clojure 集合可以用作函数,该函数测试其参数以查看它是否是列表的成员。)
ruby…[1,1,2,2,3,4].reject {|i| [1,3].include? i} # => [2, 2, 4]
在 Ruby 的情况下,使用 reject 更冗长,但避免了在管道中使用中缀运算符时可能出现的 混乱的缠结
差异通常被视为集合操作,但通常这些类型的操作确实试图删除重复项。(Clojure 在 clojure.set 中确实有一个适当的集合差异函数,但它只适用于集合,并且它的参数排序不适用于线程运算符。)