Leiningen:如何在project.clj中定义常量?

12

我的project.clj文件中有一些重复的值,如下所示:

(defproject foo "0.1.0-SNAPSHOT"
  ...

  :dependencies [[bar "3.4.5"]
                 [baz "3.4.5"]
                 [bat "3.4.5"]]

  ...)

我希望在这里使用某种常量,这样,当这些库更新到3.5.0时,我只需要更改一个地方。

在这里有什么最佳实践?我能想到的最好的做法是这样的:

(def deps-version "3.4.5")

(defproject foo "0.1.0-SNAPSHOT"
  ...

  :dependencies [[bar ~deps-version]
                 [baz ~deps-version]
                 [bat ~deps-version]]

  ...)

我添加了一个答案,但是我认为您无法使常量起作用,这是情况吗?您的示例中缺少~字符,即[bar ~deps-version]。您自己的解决方案是我在leiningen之外使用的(在gradle中用于selenium驱动程序版本),因此只需要进行一次更改,并且足够适合。 - Mark Fisher
谢谢@MarkFisher,我已经修复了代码。 - muhuk
1
那么你现在的问题的实质是什么?如果只是“我应该使用这样的版本吗?”那么答案很简单,是的。 - Mark Fisher
@MarkFisher,muhuk正在询问最佳实践是什么。您已经表达了您认为的最佳实践,因此您可以将其作为答案提供。 - Mars
这对我来说似乎有点主观,作为一个“问题”。 - Mark Fisher
@MarkFisher 你说得对,我可能没有表达清楚我的问题。但是我想知道是否有其他更好的方法。举个有点牵强附会的例子,你可以使用 #=(eval (...)) 并从文件中读取常量。(这也许不太荒谬,因为你可以将此文件作为资源并在应用程序内部读取它。)顺便说一句,随意编辑问题,重点是“如何定义常量”。 - muhuk
1个回答

6

defproject 之前使用定义是完全可以的,并且是常见做法。

你还可以执行更高级的操作,例如根据构建环境进行依赖(如果是这种情况,我会标记有效项目版本)。一个很好的例子可以在这个问题的答案中找到:Leiningen: How to define constants in project.clj?


2
这个链接指向同一个页面。要理解递归,必须先理解递归... - D-side

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接