写在开头的话:clojure中的很多语法现象都值得去思考。有时候稍微一点认知的错误,都容易导致“失之毫厘,差之千里”,这篇文章就是一个clojure
变量
counter(其实是不变量~immutable)引发的血案:( —佚名
阅读本文的内容可能要求你有的clojure相关知识:
• 基本语法
推荐网站
Are you ready, brave reader? Are you ready to meet your true destiny? Grab your best pair of parentheses: you’re about to embark on the journey of a lifetime! —braveClojure
本文不是从传统的角度来讲解如何clojure编程,而是写一个理解的过程(关于def 、let、binding等),如果你有同样的困惑,希望也能给你解惑。
1. 是什么变量?
我们项目团队的架构师leader给我们推荐并介绍clojure的例子讲到了一个变量,当时我没有注意,后来再看ppt的时候觉得有些困惑的地方。这个var是作为计数器counter,定义如下:
(def counter
(let [tick (atom 0)]
#(swap! tick inc)))
每次调用counter就能够实现一次计数的功能。
实验:调用counter的一些基本做法
boot.user=> (def counter
#_=> (let [tick (atom 0)]
#_=> #(swap! tick inc)))
#'boot.user/counter
boot.user=> (repeatedly 5 counter)
(1 2 3 4 5)
boot.user=> (counter)