Clojure解构赋值

/ / Clojure解构赋值

解构是Clojure中的一项函数,该函数允许人们从数据结构(如向量)中提取值并将其绑定到符号,而无需显式遍历数据结构。

(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)

上面的程序产生以下输出。

链接:https://www.learnfk.comhttps://www.learnfk.com/clojure/clojure-destructuring.html

来源:LearnFk无涯教程网

1 2 3 4

在上面的示例中,需要注意以下事项-

  • 我们正在定义一个整数向量,分别为1、2、3和4。

  • 然后,我们使用'let'语句将4个变量(a,b,c和d)直接分配给my-vector变量。

  • 如果对四个变量运行'println'语句,我们可以看到它们已分别分配给向量中的值。

因此,clojure已将my-vector变量解构,该变量在使用" let"语句分配时具有四个值,然后将解构的四个值相应地分配给四个参数。

如果有多余的变量没有可分配给它们的对应值,则将为它们分配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)

上面的程序产生以下输出。

链接:https://www.learnfk.comhttps://www.learnfk.com/clojure/clojure-destructuring.html

来源:LearnFk无涯教程网

1 2 3 4 nil

the-reset

“the-reset”变量用于存储剩余值,这些剩余值无法分配给任何变量。

以下程序显示了有关如何使用它的示例。

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (def my-vector [1 2 3 4])
   (let [[a b & the-reset] my-vector]
   (println a b the-reset)))
(Example)

上面的程序产生以下输出。

链接:https://www.learnfk.comhttps://www.learnfk.com/clojure/clojure-destructuring.html

来源:LearnFk无涯教程网

1 2 (3 4)

解构映射

就像矢量一样,Map映射也可以被解构,以下是如何完成此操作的示例。

(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)

上面的程序产生以下输出, 从该程序中,您可以清楚地看到“ a”和“ b”的映射值已分配给a和b的变量。

1 2

类似地,对于向量,如果在发生销毁时映射中没有对应的值,则将为变量分配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)

上面的程序产生以下输出。

链接:https://www.learnfk.comhttps://www.learnfk.com/clojure/clojure-destructuring.html

来源:LearnFk无涯教程网

1 2 nil

祝学习愉快! (发现内容有误?请选中要编辑的内容 -> 右键 -> 修改 -> 提交!帮助我们改进教程质量)

精选教程推荐

👇 以下精选教程可能对您有帮助,拓展您的技术视野

手写Python虚拟机 -〔海纳〕

Rust 语言从入门到实战 -〔唐刚〕

Go进阶 · 分布式爬虫实战 -〔郑建勋〕

说透芯片 -〔邵巍〕

编译原理实战课 -〔宫文学〕

Serverless入门课 -〔蒲松洋(秦粤)〕

数据分析实战45讲 -〔陈旸〕

Linux性能优化实战 -〔倪朋飞〕

邱岳的产品手记 -〔邱岳〕

📝 好记忆不如烂笔头,留下您的学习笔记吧!

暂无学习笔记,成为第一个分享的人吧!

您的笔记将帮助成千上万的学习者