我最近开始学习Clojure,并想知道是否存在执行简单.clj文件的标准方法。
我已经安装了Leiningen,并使用lein new app my-stuff创建了我的第一个项目my-stuff。
要运行my-stuff.core,我从lein run开始:
user>lein run
Hello, World!
接下来,我尝试了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
(ns my-stuff.core ((:gen-class))
(defn sum [x y] (+ x y))
(defn -main
[& args]
(sum [1 2]))
我收到以下错误:clojure.lang.ArityException:错误的args(1)数传递给:my-stuff.core / sum中正确定义此功能?在单独的文件中定义它并从core.clj文件引用它是否更有意义?谢谢。如果这是一个愚蠢的问题,我表示歉意,但是我如何在
core.clj
让我们检查您定义的功能:
(defn sum [x y] (+ x y))
这是一个使用two自变量
让我们检查一下如何调用该函数:x
和y
的函数。在Clojure中,函数参数用方括号括起来,因为它有助于提高可读性。
(sum [1 2])
这里您仅用一个参数调用函数sum
,向量[1 2]
就像一个2项数组。该错误试图告诉您:您正在调用一个带有两个参数,但仅提供了一个参数的函数。在这种情况下,您可以使用以下方法解决错误:
(sum 1 2)
我确实知道一种创建独立文件的方法,该文件是bash脚本和可执行的clj文件的组合,只要系统安装了Java和clj CLI工具,该文件就可以运行-https://clojure.org/guides/getting_started
它还可以让您在与Clojure源代码相同的文件中指定依赖项,即使这些依赖关系不包含在Clojure本身的一部分中。
这里是一个例子:https://github.com/jafingerhut/dotfiles/blob/master/bin/clj-check-added-metadata