欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

clojure深入学习

程序员文章站 2022-05-21 09:20:04
...

 

学习clojure有一段时间了,大多停留在看clojure doc与api和书籍上面,看的写的都是基于repl的一些零碎单调的小例子,基本的函数与关键字大概熟悉了,但还需要大量案例与工程的学习,在这篇文章中,我将零零碎碎地把自己阅读工程源码和如何构建自己的web项目的过程记录在这篇文章中,目前在读的主要是三个github上clojure web工程,工程不大,还是比较适合自己对clojure的进一步的学习,这里我贴下路径,

 

一个基于noir框架+bootstrap编写的关于tair(kv系统)的监控项目

https://github.com/dutor/lemon/blob/master/project.clj

一个zk的web框架,和上面这个工程类似

https://github.com/qiuxiafei/zk-web

也是类似的基于compojure的计算买房贷款的小工程

https://github.com/xumingming/house

 

基于目前自己clojure的熟悉程度,学习上面三个小工程,还是有一定难度,但还得硬着肚皮坚持看下去,如有心得,再来次记录一二。

 

lemon工程阅读笔记:

 

启动clj是这样的(server.clj)

 

(server/load-views-ns 'lemon.views)

 

(defn -main [& m]

  (let [mode (keyword (or (first m) :dev))

        port (Integer. (get (System/getenv) "PORT" "8011"))]

    (server/start port {:mode mode

                        :ns 'lemon})))

 

对于以上两段代码,目前还没搞清楚是如何执行的,-main()作为程序入口,执行了start方法,但(server/load-views-ns 'lemon.views) 这段代码又是怎么执行的呢? 难道是类似java中静态代码块?这个疑问已经在网上提了问题,到时候有答案我会再记录下。

 

在这里我们还要理解keyword  symbol 关键字与符号有什么区别.

 

->(seq?  [1 2 3])  处理的结果是false  证明不是序列哟  

->(coll? [1 2 3]   处理的结果是true