Vector Clojure的问题';包含';

Vector Clojure的问题';包含';,vector,clojure,contains,Vector,Clojure,Contains,我正在使用Closure Box阅读一些Clojure教程,并输入以下代码: user> (def stooges (vector "Moe" "Larry" "Curly")) #'user/stooges user> (contains? stooges "Moe") false 这难道不是真的吗?非常感谢您的帮助。向量类似于数组。如果集合中存在键,则返回true。您应该查找“键/索引”0、1或2 user=> (def stooges (vector "Moe" "La

我正在使用Closure Box阅读一些Clojure教程,并输入以下代码:

user> (def stooges (vector "Moe" "Larry" "Curly"))
#'user/stooges
user> (contains? stooges "Moe")
false

这难道不是真的吗?非常感谢您的帮助。

向量类似于数组。如果集合中存在
键,则返回
true
。您应该查找“键/索引”0、1或2

user=> (def stooges (vector "Moe" "Larry" "Curly"))
#'user/stooges
user=> (contains? stooges 1)
true
user=> (contains? stooges 5)    
false
如果您使用的是哈希

user=> (def stooges {:moe "Moe" :larry "Larry" :curly "Curly"})
#'user/stooges
user=> (contains? stooges :moe)
true
user=> (contains? stooges :foo)
false

正如mikera所建议的,你可能想要像这样的东西,这是一个常见的陷阱!我记得当我刚开始接触Clojure时,我就陷入了这样的境地:-)

检查集合中是否存在索引(0、1、2等)

您可能需要以下内容:

(some #{"Moe"} stooges)
=> "Moe"    <counts as boolean true>

(some #{"Fred"} stooges)
=> nil      <counts as boolean false>
(defn contains-value? [element coll]
  (boolean (some #(= element %) coll)))

(contains-value? "Moe" stooges)
=> true

包含?支持集,如果使用clojure-1.4

user=> (contains? #{:a, :b} :a)
true

user=> (contains? (set stooges) "Moe")
true

我懂了。谢谢你的帮助。当我用一台电视机的时候,我想做的一切都起作用了。非常好。这真的很有用。谢谢。
contains?
回答问题:“调用
get
会给我一个实际在集合中的值吗?”这是包含
nil
false
的集合的一个重要区别。