Clojure从入门到放弃
Clojure
什么是 Clojure
?小白说:"A Lisp dialet on JVM."。真是一言以蔽之啊,是不是足够简单?酷!
安装 Clojure
大部分人学习新的东西,基本上都死在了配置环境上。此言非虚!没有一个好的环境,很容易挫败自信心。
Windows 上安装
安装比较简单,省略。
Linux 上安装
安装也比较简单,省略。不过还是简单的介绍一下吧。
yum install -y rlwrap
curl -O https://download.clojure.org/install/linux-install-1.10.1.492.sh
chmod +x linux-install-1.10.1.492.sh
sudo ./linux-install-1.10.1.492.sh
# 安装完成会有如下输出
Installing libs into /usr/local/lib/clojure
Installing clojure and clj into /usr/local/bin
Installing man pages into /usr/local/share/man/man1
Removing download
Use clj -h for help.
简单使用:
root@ip-192-168-2-56 ~]# clj
Clojure 1.10.1
user=> (+ 1 2) # 在此输入语句
3
user=> (def a "hello world") # 定义一个变量
#'user/a
user=> a
"hello world"
user=> (defn sum [number] # 定义一个函数
(apply + number))
#'user/sum
user=> (sum [1 2 3 4 5])
15
好了,入门教程就介绍到这里,是不是很简单?酷!
lein
lein
这个工具类似 JavaScript
生态中的 npm
或 yarn
工具,但功能不止这么多,还有点脚手架的功能。
lein 安装
基本命令使用:
lein new [TEMPLATE] NAME # generate a new project skeleton
lein test [TESTS] # run the tests in the TESTS namespaces, or all tests
lein repl # launch an interactive REPL session
lein run -m my.namespace # run the -main function of a namespace
lein uberjar # package the project and dependencies as standalone jar
lein deploy clojars # publish the project to Clojars as a library
一个简单的应用
我们可以使用 lein
来创建应用,
lein new app my-stuff
# app 指定创建的是一个应用,而不是一个库
[root@ip-192-168-2-56 my-stuff]# pwd
/root/github/my-stuff
[root@ip-192-168-2-56 my-stuff]# tree -L 2
.
├── CHANGELOG.md
├── doc
│ └── intro.md
├── LICENSE
├── pom.xml
├── project.clj
├── README.md
├── resources
├── src
│ └── my_stuff
├── target
│ ├── classes
│ ├── my-stuff-0.1.0-SNAPSHOT.jar
│ └── stale
└── test
└── my_stuff
9 directories, 7 files
在 project.clj
里设置我们的依赖(很像 Java
中的 pom.xml
文件)。文件内容看起来如下:
(defproject my-stuff "0.1.0-SNAPSHOT"
:description "A simple Clojure project"
:url "http://localhost/hello"
:license {:name "Eclipse Public License"
:url "https://www.eclipse.org/legal/epl-2.0/"}
:dependencies [[org.clojure/clojure "1.10.0"]
[clj-http "3.10.0"]]
:profiles {:dev {:dependencies [[ring/ring-devel "1.4.0"]]}}
:main my-stuff.core
:aot [my-stuff.core])
简单介绍一下依赖项都是做什么的:
clj-http
一个HTTP
客户端工具ring
一个WEB
框架,类似Python
中的Django
或Flask
再看看 main
函数,位于:src/my_stuff/core.clj
文件中,内容如下:
(ns my-stuff.core
(:gen-class))
(defn -main [& args]
(println "Welcome to my project! These are your args:" args))
这样就可以了,我们打包一下,可以打成 jar
包。
lein uberjar
Compiling my-stuff.core
Compiling my-stuff.core
Created /root/github/my-stuff/target/my-stuff-0.1.0-SNAPSHOT.jar
Created /root/github/my-stuff/target/my-stuff-0.1.0-SNAPSHOT-standalone.jar # 这个 jar 包可以单独执行的
运行一下:
java -jar target/my-stuff-0.1.0-SNAPSHOT-standalone.jar
Welcome to my project! These are your args: nil
java -jar target/my-stuff-0.1.0-SNAPSHOT-standalone.jar Hello Clojure!
Welcome to my project! These are your args: (Hello Clojure!)
参考文档
入门教程
clj-http 安装