来自 clojure 新手的问题:如果我希望能够从任何地方启动 clojure REPL,例如因为我只想计算指数,该怎么办?我如何设置我的系统来执行此操作? (我已经删除了之前指向不完全答案的链接,因为它们使问题变得困惑。)下面由 @Jared314 的答案链接的 Pomegranate 文档帮助我看到我可以做到这一点:
~$ lein repl
...
user=> (use '[cemerick.pomegranate :only (add-dependencies)])
nil
user=> (add-dependencies :coordinates '[[org.clojure/math.numeric-tower "0.0.2"]])
{[org.clojure/clojure "1.3.0"] nil, [org.clojure/math.numeric-tower "0.0.2"] #{[org.clojure/clojure "1.3.0"]}}
user=> (use 'clojure.math.numeric-tower)
nil
user=> (expt 2 3)
8
耶!
现在,无论我位于哪个子目录中,如何才能在每次启动 REPL 时实现此操作?
我想我只是对基本的 clojure 设置一无所知。对此感到抱歉。
第二次主要编辑:
我发现如果我使用没有 lein 的原始 clojure,我可以在 repl 启动时执行命令。例如,如果文件 .clojurerc
包含文本 (print "Yow!\n")
,我可以这样做:
~$ java -cp /usr/local/lib/clojure-1.5.1/clojure-1.5.1.jar clojure.main -i .clojurerc -r
Clojure 1.5.1
Yow!
user=>
我可以用lein
做这样的事情吗?或者也许更好的是,在 clojure 中自动加载 clojure.math.numeric-tower,而不使用 lein(因为对于简单的命令行实验,lein 的启动比直接启动 clojure 慢)。
(看起来好像我并没有试图自己解决这个问题,但事实并非如此。我一直在进行网络搜索和实验,但我一直碰壁。我开始觉得如果 clojure 仅用于成熟的编程项目。我曾认为它可能适合临时实验和计算(传统上 lisp 是这样,但 Java 不是)。我没有尝试煽动争论。我只是感到沮丧。应该有一个简单的、众所周知的公式来完成我想做的事情。)
最佳答案
当您需要外部依赖项时,您将需要一个新项目,lein new testproject1
,lein-oneoff plugin , Pomegranate 、Leiningen 配置文件 :dependencies
条目或某些特定的 IDE 功能。 (我知道至少 LightTable 允许在其 Instarepl 中进行外部依赖,所以我假设您可以在 Emacs 和 CCW 中做到这一点。)
最好从创建一个新的测试项目开始,这样您就可以看到 project.clj
布局。但是,如果您只想在 repl 中使用一次性库,请查看 instructions对于 Pomegranate 的 add-classpath
命令。默认情况下,可以在 lein repl 中访问 Pomegranate,因此他们的示例应该无需任何额外内容即可工作。
编辑:
从您更新的问题来看,听起来您想要持久的 repl 依赖关系。您可以将 [org.clojure/math.numeric-tower "0.0.2"]
添加到 ~/.lein/profiles.clj
配置文件中,位于 :repl
配置文件。
{:user {}
:repl {:dependencies [[org.clojure/math.numeric-tower "0.0.2"]]
:repl-options {:init (use 'clojure.math.numeric-tower)}}}
然后当你运行lein repl
时:
(expt 2 3) ;=> 8
关于clojure - 始终加载 clojure 库的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18834808/