如何直接运行 Clojure 脚本文件

如何直接运行 Clojure 脚本文件,第1张

对于大多数的脚本编程语言来说, 提供有现成的分别进入控制台与执行脚本文件的命令. 例如 Scala, Python 默认进入控制台(REPL), 接文件路径为参数则执行脚本文件. 还有分别进入控制台和执行脚本的命令是: irb 与 ruby, groovsh 与 groovy, php -a 与 php, perl -de1 和 perl. 可以 Clojure 本身就没有 clojure 这样的命令. 当我们试图在 Mac 下用 brew install clojure 安装时, 得到的提示是没有 clojure, 应该用 brew install leiningen 去安装 leiningen, 它是一个类似于 Scala sbt 的工具.

所以启动 Clojure REPL 的命令就是 lein repl , 其实还有一个办法来启动 Clojure 的控制台, 因为 Clojure 也是构筑于 JVM 之上的, 所以也能像启 Groovy/Scala 一样通过 java 指令加载 jar 文件来启动. 去官网 http://clojure.org/ 下载 Clojure 安装包(例如: ), 解压, 假定它的 jar 文件是 ~/Developers/clojure-1.8.0/clojure-1.8.0.jar , 那么也可以用命令 java -jar ~/Developers/clojure-1.8.0/clojure-1.8.0.jar 进到 Clojure 控制台.

进到 Clojure 的提示符 user=>下就可以测试 Clojure 代码了, 那么如何加载一个写在 clj 文件里的代码呢? 我们可以在 Clojure 控制台下用方法 load-file . 假定 ~/hello.clj 文件的内容是

(+ 1 2)

在 Clojure 控制台下

user=>(load-file "~/hello.clj")3

这只是相当于我们在控制台输入 (+ 1 2) , 也看伍猛到了 3, 其实我们在 ~/hello.clj 中并没有打印输出结果. 所以如果真正是执行 ~/物棚hello.clj 应该是什么也看不到了, 我们需要准确的执行 clojure 脚本文件的方法.

在此我们也顺道温习一下 Clojure 与 Java 的简单互 *** 作, 创建了文件 ~/interop.clj , 内容如下:

(+ 1 2 3)

(println (. Math PI))

(println (. Math abs -3))

(println (. "foo" toUpperCase))

(println Math/PI)

(println (Math/abs -5))

(println (.toUpperCase "bar"))

(def n1 (new Integer "42"))

(println n1)

(let [n2 (Integer. "53")]

(println n2))

针对启动 Clojure 控制台的不同我们同样有两种方式执行 Clojure 脚本文件

一: 通过 clojure-x.x.x.jar 来执行 Clojure 脚本

➜ ~ java -jar ~/Developers/clojure-1.8.0/clojure-1.8.0.jar ~/interop.clj

3.141592653589793

3

FOO

3.141592653589793

5

BAR

42

53

上面的执行效果才是正确的, 其中 (+ 1 2 3) 没有 print 是不会有输出的.

把它编制成一个 bash 脚本 clojure 就是

#!/bin/bash

java -jar ~/Developers/罩橘则clojure-1.8.0/clojure-1.8.0.jar $@

$@ 的意思是传什么给这个 clojure 脚本, 它就原原本本的送到 clojure-1.8.0.jar 的主程序. 然后把 clojure 用 chmod +x clojure 改成可执行. 再来看下

➜ ~ vi clojure

➜ ~ ./clojure

Clojure 1.8.0

user=>^D

➜ ~ ./clojure ~/interop.clj

3.141592653589793

3

FOO

3.141592653589793

5

BAR

42

53

没参数时进入控制台, 有参数时当成文件加载执行

二: lein 通过 exec 插件执行 clojure 脚本

lein 的插件安装可以参考 lein-exec . 全局安装的话只要在 ~/.lein/profiles.clj 中添加一行

{:user {:plugins [[lein-exec "0.3.6"]]}}

再次启动 lein 就会自动下载相应的插件依赖, 并加入了 exec 任务, 用 lein help exec 查看这个插件的具体命令使用方法. 简单的用来加载外部 clj 文件的指令是

➜ ~ lein exec ~/interop.clj

3.141592653589793

3

FOO

3.141592653589793

5

BAR

42

53

执行结果是一致的.

不仅如此, Clojure 也能用作系统脚本语言, 像其他脚本语言一样. 下载 https://raw.github.com/kumarshantanu/lein-exec/master/lein-exec 放在 PATH 下, 并改成可执行.

之后只要在 clj 脚本第一行写上

#!/usr/bin/env lein-exec

#!/bin/bash lein-exec

就可以用 Clojure 快乐的写系统脚本了.

另外, 如果 clj 文件是放在一个 lein 项目中, 应该是可以通过 lein 任务来执行主函数中的代码的.

附: 在我目前的 ~/.lein/profiles.clj 文件中已用到了三个插件

{:user {:plugins [[venantius/ultra "0.4.1"]

[lein-iclojure "1.2"]

[lein-exec "0.3.6"] ]}}

分别是 控制台着色, 代码提示, 和执行插件.

Leiningen是一个用于自动化(构建)clojure项目的工具。

它可以做到:

创建新项目

管理你的项目的依赖关搜凯仿系

运行测试

运行一个REPL(读取-求值-打印循环:read-eval-print loop)

编译java源码

运行项目

为项目产生一个Maven风格的POM文件

为了部署,编译和打包项目

发布类库到Maven仓库,例如Clojars

运行Clojure编写的自定义的自动化任务(称为Leiningen插件)

... 具体可以查看国内的大牛(killme2008)翻译的Leiningen教程中文版的详细介绍。

好些话说多了点,大家别着急啊,马上就切入主题:

1. 下载安装Leiningen

linux:

1. 确保你是jdk 6 版本以下的。

2. 下载脚本lein

3. 把lein加入下当前的$path下(~/bin 是最好的选择)

4. 赋可执行权限(chmod 755 ~/bin/lein)

windows:

1. 可以直接下载打包好的文件,地址是:Leiningen for windows

2. 点击下载好的*.exe文件进行安装

3. 安装好后,可以查看环境变量中会有相应的变量被设置好了:

lein.bat is added to your PATH variable.

LEIN_JAVA_CMD is set to point to your selected JDK, and the :java-cmd property is set in your user profile in profiles.clj.

接下来,打开命令窗口孙此,输入世纤命令:lein self-install ,会自动下载安装leiningen 相关的jar文件。

这三个,都和Java无关,只是碰巧都运行在JVM之上而已。他汪老们都没有想过要取代Java,都是独立的语言,差异极大。

groovy是一门脚本语言,个人觉得没啥用处。

Scala是怪兽,人类历史上最有野心的编程语言。

clojure,是JVM上的困滑升lisp,并发支持的很好。是这个世界上你需要学习的最后一门语言。

同时,他们都不能替代让正Python或者Ruby或者PHP。

他们都不是来填坑的,都是来挖坑的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12288149.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存