用途は、これまでのベクトルである:Clojureにgetやmapやmapは別にありますか?私が知っている
(get [1 2 3 4] 2) ; => 3
とマップ上:ドキュメントから
(get {:a "a" :b "B" :c "c"} :c) ; => "c"
それは言う:
clojure.core /取得する([地図キー] [マップキーが見つかりません])
キーが見つからない場合はnil、キーが存在しない場合はnilにマップされた値を返します。
用途は、これまでのベクトルである:Clojureにgetやmapやmapは別にありますか?私が知っている
(get [1 2 3 4] 2) ; => 3
とマップ上:ドキュメントから
(get {:a "a" :b "B" :c "c"} :c) ; => "c"
それは言う:
clojure.core /取得する([地図キー] [マップキーが見つかりません])
キーが見つからない場合はnil、キーが存在しない場合はnilにマップされた値を返します。
別にマップとベクトルから、のための一般的な使用はを取得した文字列である:
(get "Cthulhu" 2) ;; => \h
はもセットとネイティブJava(スクリプト)アレイ上で動作し得ます。 ClojureScriptとJavaScript間-OPで一つの可能な使用:
(def js-array (-> (js/Array 10) ;Create and fill native JS array
(.fill "a")
(.map (fn [_ i] i))))
(get js-array 3) ; => 3
別の例としては、セット内の項目で検索するための作品を取得:(ソートして、それが機能しないこと
(get #{:b :c :a} :c) ;;=> :c
注意を)を設定し、インデックス、例えば:あなたは、多くの場合、取得の使用を避けることができるようにさらに
(get (sorted-set :b :a :c) 1) ;; throws exception
、マップ、ベクター、およびセットは、そのメンバーの機能として動作します完全:は、ボンネットの下に作品を取得する方法を理解するために
(get {:a :b :c} :d) ; => nil
(get {:a :b :c} :d :not-found) ; => :not-found
も参照してください@Thumbnail's answer:
(#{:a :b :c} :b) ; => :b
({:a 1 :b 2 :c 3} :b) ; => 2
([:a :b :c] 1) ; => :b
彼らと取得を使用する利点は、デフォルト値を提供できることです。
@ToniVanhanla's answerさらに、JVMの場合、関連するClojureインターフェイスはclojure.lang.ILookup
です。
見る、アメリカ人が言うように、フードの下、
get
がclojure.lang.RT/get
への呼び出しに変換されます。ILookup
にキャストされ、適切な valAt
メソッドが呼び出されます。...RT/getFrom
これらのフィットのいずれも場合、それはnil
を返します。
Java配列の親インターフェイスはありません。それらはすべてObject
から直接発生します。マップのあなたができることを、
(java.util.Vector. (seq "Hello, world!"))
=> [\H \e \l \l \o \, \space \w \o \r \l \d \!]
しかし
(get (java.util.Vector. (seq "Hello, world!")) 4)
=> nil
お知らせ:彼らはやや意外にも、Clojureの
get
は、Vector
SなどのJavaコレクションでは動作しませんJavaのClass/isArray
によって検出されていますしかし、(({:a 1:b 2}:c 10) 'を使ってデフォルト値を指定してください。 –