栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python习惯用法“如果__name__ =='__main__'”的clojure等效项是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python习惯用法“如果__name__ =='__main__'”的clojure等效项是什么?

从命令行一遍又一遍地运行Clojure脚本不是惯用的。REPL是更好的命令行。Clojure是一个Lisp,通常会启动Clojure并使该实例永远运行,并与其交互而不是重新启动它。您可以一次更改一个正在运行的实例中的功能,然后运行它们并根据需要戳它们。摆脱繁琐而缓慢的传统编辑/编译/调试周期是Lisps的一大特色。

您可以轻松编写函数来执行诸如运行单元测试之类的功能,并且只要想运行它们就可以从REPL调用这些函数,否则就忽略它们。在Clojure中

clojure.contrib.test-is
,通常会使用,将测试函数添加到名称空间中,然后再使用
clojure.contrib.test-is/run-tests
它们来运行它们。

不从命令行运行Clojure的另一个很好的理由是,JVM的启动时间可能过长。

如果您真的想从命令行运行Clojure脚本,则可以使用多种方法。有关某些讨论,请参见Clojure邮件列表。

一种方法是测试命令行参数的存在。

foo.clj
在当前目录中给出以下内容:

(ns foo)(defn hello [x] (println "Hello," x))(if *command-line-args*  (hello "command line")  (hello "REPL"))

根据如何启动Clojure,您将获得不同的行为。

$ java -cp ~/path/to/clojure.jar:. clojure.main foo.clj --Hello, command line$ java -cp ~/path/to/clojure.jar:. clojure.mainClojure 1.1.0-alpha-SNAPSHOTuser=> (use 'foo)Hello, REPLniluser=>

src/clj/clojure/main.clj
在Clojure的来源,如果你想看到这是如何工作的。

另一种方法是将代码编译成

.class
文件,然后从Java命令行调用它们。给定一个源文件
foo.clj

(ns foo  (:gen-class))(defn hello [x] (println "Hello," x))(defn -main [] (hello "command line"))

创建一个目录来存储编译的

.class
文件;默认为
./classes
。您必须自己创建此文件夹,Clojure不会创建它。还要确保您设置
$CLASSPATH
为包括
./classes
和带有源代码的目录;我假设
foo.clj
它在当前目录中。因此,从命令行:

$ mkdir classes$ java -cp ~/path/to/clojure.jar:./classes:. clojure.mainClojure 1.1.0-alpha-SNAPSHOTuser=> (compile 'foo)foo

classes
目录中,您现在将有一堆
.class
文件。要从命令行调用代码(
-main
默认情况下运行函数):

$ java -cp ~/path/to/clojure.jar:./classes fooHello, command line.

clojure.org上有很多有关编译Clojure代码的信息。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/638556.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号