clojure - 始终加载 clojure 库的最简单方法是什么?

标签 clojure

来自 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 testproject1lein-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/

相关文章:

testing - 测试clojure数据结构时无法解释结果

python - Python 成语 "if __name__ == ' __main_ _'"的 clojure 等价物是什么?

macros - 将 Clojure 宏用于 DSL

clojure - 初学者 Clojurist 惰性序列错误 : Don't know how to create ISeq from: java. lang.Long

clojure - clojure中断言为真时如何返回对应的数字

vim - 在 vim for clojure 中导航到下一个表单的移动快捷方式

encryption - clojure 有 AES 库吗?

clojure - clojure线程运算符

javascript - 在ClojureScript中使用 'eval'特殊形式来判断一个形式是否是文字

dictionary - Clojure reducer /映射不工作