`

clojure 变量绑定

阅读更多
clojure 变量绑定 可以是let绑定, 函数形参实参绑定, 分为2大类,均支持嵌套,活用let绑定会使代码简洁
1. 顺序绑定
(let [x 1 y 2] (print x, "," y))  #x=>1,  y=>2
 
(let [x 1 _ 2] (print x, "," y))  #x=>1,  _=>2  这里 _ 是通配符
 
(def arr [1 2 3 4 5])
(let [[x y z] arr] (print x "," y "," z))#  x=>1,  y=>2, z=>3
 
1.1 匹配剩余参数(使用&符号)
(def arr [1 2 3 4 5])
(let [[x y & z] arr] (print x "," y "," z))#  x=>1,  y=>2, z=>[3 4 5]
 
1.2 匹配整个列表(使用 :as)
(def arr [1 2 3 4 5])
(let [[x y :as z] arr] (print x "," y "," z))#  x=>1,  y=>2, z=>[1 2 3 4 5]
 
如果带有 &,则 :as须放到最后
(def arr [1 2 3 4 5])
(let [[x y & z :as all] arr] (print z) (print "\n") (print all))
 
2. map 绑定
此种绑定会将变量视为map
以下let绑定中的变量是个map结构
(def some-one {:id 123 :name "john" :age 18 :job "enginneer" :sex "male" })
(let [{id :id name :name} some-one] (print id " " name)) #id=> 123,   name=> john
 
以下是个vector,但会被视为map
(let [{a 0 b 2} [3 4 5 6 7 8]] (print x y)) # a=>3, b=>5
 
:as 也可用于map绑定 语义和顺序绑定一样
:or 用于提供默认值,当绑定的key不在变量map中时,就会提供默认值
以下例子 :unknown 是个不存在的key,所以使用:or提供的默认值
(let [{x :a y :b z :unknown :or {z 11}} {:a 5 :b 6}] (println x) (println y) (println z))
 
关于 :keys,  :str,  :sys
这三个用于绑定时,指定key类型为相应的类型,且绑定方式变得
简洁了以下使用:key的例子
(def chas {:name "chas" :age 31 :location "massachusetts"})
(let [{:keys [name age location]} chas] (print name age location))#
 
 
 
 
关键字参数绑定
如果剩余部分元素个数是偶数个,顺序结构会把剩余部分当初一个map来处理
(def user-info ["robert8920" 2001 :name "Bob" :city "Boston"])
(let [[username account-year & {:keys [name city]}] user-info] (println username) (println name) (println city))
0
0
分享到:
评论

相关推荐

    clj-antlr, ANTLR 4解析器的Clojure绑定.zip

    clj-antlr, ANTLR 4解析器的Clojure绑定 clj-antlr面向 ANTLR 4 解析器库的Clojure绑定,一个自适应的( * ) 。 看起来很像 Instaparse,只有更快的语法定义,更丰富的语法定义,而且没有令人愉悦的。安装只需将 clj-...

    sparkplug:适用于Apache Spark的Clojure API绑定

    Clojure Spark API SparkPlug是的Clojure API。 安装 库版本在Clojars上发布。 要将最新版本与Leiningen一起使用,请在您的项目中添加以下依赖项: 这将引入omnibus程序包,而该程序包又取决于相同版本的每个子...

    tools.usb:Clojure libusb 绑定

    USB 用于 Clojure 的基于 usb4java 的 USB 库( )。版权和许可麻省理工学院许可证 (MIT) 版权所有 (c) 2015 Adrian Medina 特此授予任何人免费获得本软件和相关文档文件(“软件”)副本的许可,不受限制地处理本...

    Programming Clojure 英文电子版

    这是Programming Clojure 电子版的 纸质版本在美国亚马逊要到2009年3月才能上架 Paperback: 200 pages Publisher: Pragmatic Bookshelf (March 15, 2009) Language: English ISBN-10: 1934356336 ISBN-13: 978-...

    Clojure编程乐趣

    Clojure is an opinionated language—it doesn’t try to cover all paradigms or provide every checklist bullet-point feature. Instead it provides the features needed to solve all kinds of real-world ...

    Professional.Clojure.1119267277

    Clear, practical Clojure for the professional programmer Professional Clojure is the experienced developer's guide to functional programming using the Clojure language. Designed specifically to meet ...

    Practical Clojure.pdf

    Practical Clojure Clojure语言书籍

    clojure eclipse

    clojure clojure clojureclojure clojure

    clojure相关书籍1

    【1】[Clojure编程乐趣](The Joy of Clojure).pdf 【2】Clojure – Functional Programming for the JVM中文版.pdf 【3】Clojure Cookbook.pdf 【4】Clojure Data Analysis Cookbook.pdf 【5】clojure Hand book...

    Clojure电子书合集2(13本)

    [2013] Functional Programming Patterns in Scala and Clojure - Write Lean Programs for the JVM.(Michael Bevilacqua-Linn).[1937785475].pdf+epub.rar [2014] Clojure Cookbook - Recipes for Functional ...

    Clojure可选类型系统TypedClojure.zip

    Typed Clojure 保留了 Clojure 的优势,是 Clojure 的可选类型系统,也可以说是 Clojure 的一个库,改善了大量的静态类型安全检测。主要特性:从 Java 中保护你的 Clojure 程序,进行安全的互操作,正确的使用外部 ...

    Clojure编程乐趣]+clojure_programming.pdf

    Clojure编程乐趣和clojure_programming.pdf两本书

    PdClojureBindings:PagerDuty API的Clojure绑定

    API的非官方Clojure绑定。 可以在上找到该API的文档。 正在安装 可以从作为Maven工件 [pdclient " 0.1.3 " ] 基本用法 注意:以下代码在上处于可运行形式 将绑定导入到您的代码中: ( ns ...

    Clojure电子书合集1(12本)

    [2009] Programming Clojure.(Stuart Halloway).[1934356336].pdf [2010] Functional Programming with Clojure - Simple Concurrency on the JVM.(Tim Berglund, Matthew McCullough).[193650202X].pdf [2010] ...

    Mastering.Clojure.1785

    Learn to handle data using sequences, reducers, and transducers in Clojure Explore the lesser known and more advanced features, constructs, and methodologies of the Clojure language and its ecosystem,...

    Clojure入门教程- Clojure – Functional Programming for the JVM中文版

    Clojure入门教程- Clojure – Functional Programming for the JVM中文版

    [Clojure] Clojure 编程 (英文版)

    [奥莱理] Clojure 编程 (英文版) [奥莱理] Clojure Programming (E-Book) ☆ 出版信息:☆ [作者信息] Chas Emerick, Brian Carper, Christophe Grand [出版机构] 奥莱理 [出版日期] 2012年04月19日 [图书页数...

    clojure1.3.0及资料

    clojure1.3.0及资料,附《Programming Clojure》,《Practical Clojure》

Global site tag (gtag.js) - Google Analytics