的使用,我知道到目前为止都在向量:除了地图和向量,Clojure还有其他用途吗?
(get [1 2 3 4] 2) ; => 3
,并在地图上:
(get {:a "a" :b "B" :c "c"} :c) ; => "c"
从技术文档,它说:
clojure.core /获取([图键] [地图键未找到])
如果键不存在,则返回映射到键的值,未找到或无。
的使用,我知道到目前为止都在向量:除了地图和向量,Clojure还有其他用途吗?
(get [1 2 3 4] 2) ; => 3
,并在地图上:
(get {:a "a" :b "B" :c "c"} :c) ; => "c"
从技术文档,它说:
clojure.core /获取([图键] [地图键未找到])
如果键不存在,则返回映射到键的值,未找到或无。
除了地图和载体,共同使用了得到是字符串:
(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
此外,地图,矢量和集作为其成员的功能,让你可以经常避免使用得到干脆:
(#{:a :b :c} :b) ; => :b
({:a 1 :b 2 :c 3} :b) ; => 2
([:a :b :c] 1) ; => :b
使用的优势得到他们是可以提供一个默认值:
(get {:a :b :c} :d) ; => nil
(get {:a :b :c} :d :not-found) ; => :not-found
又见@Thumbnail's answer了解如何让引擎盖下作品。
除了@ToniVanhanla's answer,对于JVM,相关的Clojure接口是clojure.lang.ILookup
。
看,就像美国人说,在引擎盖下,
get
转化到clojure.lang.RT/get
通话。ILookup
并调用相应的 valAt
方法。...RT/getFrom
如果没有这些拟合的,它返回nil
。
Java数组没有父接口:它们都直接从Object
下降。他们是由Java的Class/isArray
出人意料的是,Clojure的get
不会对Java集合的工作,如Vector
小号检测:
(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
注意,对于地图,你可以使用'(({:a 1:b 2}:c 10)'指定默认值,但它不适用于矢量 –