W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
解構是Clojure中的一個功能,它允許從數(shù)據(jù)結構(如向量)中提取值,并將它們綁定到符號,而不必顯式地遍歷數(shù)據(jù)結構。
讓我們看一個例子,說明Destructuring是什么意思,以及它是如何發(fā)生的。
(ns clojure.examples.example (:gen-class)) (defn Example [] (def my-vector [1 2 3 4]) (let [[a b c d] my-vector] (println a b c d))) (Example)
以上示例輸出以下結果:
1 2 3 4
在上面的例子中,需要注意以下幾點:
我們定義一個整數(shù)的向量為1,2,3和4。
然后我們使用'let'語句直接將4個變量(a,b,c和d)分配給my-vector變量。
如果我們對四個變量運行'println'語句,我們可以看到它們已經(jīng)被分配給向量中的值。
所以clojure解構了my-vector變量,當使用'let'語句賦值時,它有四個值。 然后將解構的四個值相應地分配給四個參數(shù)。
如果有過多的變量沒有可以分配給它們的對應值,那么它們將被賦值為nil。 以下示例說明了這一點。
(ns clojure.examples.hello (:gen-class)) (defn Example [] (def my-vector [1 2 3 4]) (let [[a b c d e] my-vector] (println a b c d e))) (Example)
上述程序產(chǎn)生以下輸出。 你可以從輸出中看到,因為最后一個變量'e'在向量中沒有對應的值,它占了nil。
1 2 3 4 nil
'the-rest'變量用于存儲剩余的值,不能分配給任何變量。
下面的程序顯示了如何使用它的示例。
(ns clojure.examples.example (:gen-class)) (defn Example [] (def my-vector [1 2 3 4]) (let [[a b & the-rest] my-vector] (println a b the-rest))) (Example)
上述程序產(chǎn)生以下輸出。 從輸出中,可以清楚地看到3和4的值不能分配給任何變量,因此它們被分配給'-rest'變量。
1 2 (3 4)
就像矢量一樣,地圖也可以被解構。 以下是如何實現(xiàn)這一點的示例。
(ns clojure.examples.example (:gen-class)) (defn Example [] (def my-map {"a" 1 "b" 2}) (let [{a "a" b "b"} my-map] (println a b))) (Example)
上述程序產(chǎn)生以下輸出。 從程序中可以清楚地看到“a”和“b”的映射值被分配給a和b的變量。
1 2
類似地,在向量的情況下,如果在解構發(fā)生時在映射中沒有對應的值,則變量將被賦值為nil。
下面是一個例子。
(ns clojure.examples.example (:gen-class)) (defn Example [] (def my-map {"a" 1 "b" 2}) (let [{a "a" b "b" c "c"} my-map] (println a b c))) (Example)
上述程序產(chǎn)生以下輸出。
1 2 nil
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: