10

Closure Box を使用していくつかの Clojure チュートリアルを実行し、次のコードを入力しました。

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

これは TRUE と評価されるべきではありませんか? どんな助けでも大歓迎です。

4

3 に答える 3

14

これはよくある罠です!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
于 2012-08-15T02:10:36.333 に答える
11

ベクトルは配列に似ています。がコレクションに存在する場合にcontains?返します。「キー/インデックス」0、1、または2を探している必要がありますtruekey

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.core/some のようなものが必要です

于 2012-08-15T02:05:42.867 に答える
7

含む? サポート セット、clojure-1.4 を使用する場合

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

user=> (contains? (set stooges) "Moe")
true
于 2012-08-15T02:14:44.347 に答える