使用Leiningen运行.clj Clojure文件

使用Leiningen运行.clj Clojure文件,clojure,leiningen,Clojure,Leiningen,我最近开始学习Clojure,想知道是否有一种执行简单.clj文件的标准方法 我已经安装了Leiningen,并使用lein新应用程序my stuff创建了我的第一个项目my stuff 为了运行my-stuff.core,我从lein run开始: 接下来,我尝试了lein repl,然后是: user=> (require 'my-stuff.core) nil user=> (my-stuff.core/-main) Hello, World! nil 我还使用lein r

我最近开始学习Clojure,想知道是否有一种执行简单.clj文件的标准方法

我已经安装了Leiningen,并使用lein新应用程序my stuff创建了我的第一个项目my stuff

为了运行my-stuff.core,我从lein run开始:

接下来,我尝试了lein repl,然后是:

user=> (require 'my-stuff.core)
nil
user=> (my-stuff.core/-main)
Hello, World!
nil 
我还使用lein repl进行了一些基本评估:

user=> (defn sum [x y] (+ x y))
#'user/sum
user=> (sum 1 2)
3
我试图在my-stuff.core中定义此函数:

我得到以下错误: clojure.lang.ArityException:传递给my-stuff.core/sum的args 1的数目错误

如果这是一个愚蠢的问题,我很抱歉,但是我如何在core.clj中正确定义这个函数呢?在单独的文件中定义它并从core.clj文件中引用它是否更有意义

多谢各位

使现代化
如果该函数是在另一个.clj Clojure文件中定义的,那么什么是正确的方法来声明名称空间,以便能够从项目my stuff中运行代码?

没有愚蠢的问题!:-

让我们检查一下您定义的函数:

定义和[xy]+xy 这是一个接受两个参数x和y的函数。在Clojure中,函数参数用方括号括起来,因为它有助于可读性

让我们检查一下如何调用该函数:

总和[1 2] 在这里,您仅使用一个参数调用函数sum,即向量[12],它类似于一个2项数组。错误试图告诉您:您正在调用一个包含两个参数的函数,但只提供了一个参数。在这种情况下,您将使用以下方法修复错误:

总数12 编辑:如果在项目中创建新名称空间,如下所示:

src
└── myapp
    ├── core.clj
    └── utils.clj
您可以在顶部的ns声明中使用:require指令从另一个命名空间调用函数

假设我在utils.clj中有这个函数:

ns myapp.utils 定义和[a b] +a b 然后可以从核心命名空间调用sum,如下所示:

src
└── myapp
    ├── core.clj
    └── utils.clj
ns myapp.core :需要[myapp.utils:参考[sum]] defn-main [&args] 总数12;;调用“myapp.utils”命名空间中定义的“sum”
我打赌有很多方法可以使用Leiningen创建一个独立的.clj文件,但我不知道它是什么

我确实知道一种创建独立文件的方法,它是bash脚本和可执行clj文件的组合,只要系统安装了Java和clj CLI工具,就可以运行-

它还可以让您在与Clojure源代码相同的文件中指定依赖项,即使这些依赖项没有作为Clojure本身的一部分包含在内


这里有一个例子:

Oops,我错过了。非常感谢。我已经更新了我的答案,以解决您关于从另一个命名空间调用函数的问题。
src
└── myapp
    ├── core.clj
    └── utils.clj