当前位置: 首页 > 知识库问答 >
问题:

用Leiningen运行. clj Clojure文件

岑熙云
2023-03-14

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

我已经安装了Leiningen,并创建了我的第一个项目称为我的东西使用lein新应用程序我的东西。

管理我的东西。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

我试着在我的东西里定义这个函数。核心:

(ns my-stuff.core ((:gen-class))

(defn sum [x y] (+ x y))

(defn -main
  [& args]
  (sum [1 2]))

我得到以下错误:clojure.lang.ArityExcture:错误数量的args(1)传递到:my-stuff.core/sum

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

谢谢你。

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

共有2个答案

管景天
2023-03-14

没有愚蠢的问题!:-)

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

(defn sum [x y] (+ x y))

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

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

  (sum [1 2])

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

  (sum 1 2)

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

src
└── myapp
    ├── core.clj
    └── utils.clj

您可以使用顶部的ns声明中的:require指令从其他命名空间调用函数。

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

(ns myapp.utils)

(defn sum [a b]
  (+ a b))

然后您可以从core命名空间调用sum,如下所示:

(ns myapp.core
  (:require [myapp.utils :refer [sum]]))

(defn -main
  [& args]
  (sum 1 2)) ;; call `sum` defined in the `myapp.utils` namespace
法和硕
2023-03-14

我敢打赌,有很多方法可以使用Leiningen创建一个独立的。clj文件,但我不知道它是什么。

我确实知道一种创建独立文件的方法,它是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

 类似资料:
  • 作为Clojure的新手,我使用leiningen创建了一个示例项目 它给了我这个目录 在不修改任何文件的情况下,我可以使用 但是我无法使用运行测试从REPL做同样的事情 我试过(但不起作用)

  • Leiningen Leiningen 是另一个更早的建构工具, 简称 lein http://leiningen.org/ Boot 配置更加简单灵活, 推荐 Boot. 不过 Leiningen 发布时间造很多, 用户和插件都更多, 也会用到. lein 更像是 Grunt, 配置强大, 然而 Boot 却很容易对 Task 进行组合使用. 对应 cljs 项目来说, 还是推荐用 Boot.

  • leiningen 是用于 Clojure 的构建工具。使用方法: $ lein new NAME # generate a new project skeleton$ lein test [TESTS] # run the tests in the TESTS namespaces, or all tests$ lein repl # launch an interactive REPL ses

  • 我最近--就像今天一样--对学习用Clojure编程产生了兴趣。现在,在安装了最新版本的Java jdk并下载了leiningen脚本之后,我遵循了后者的安装说明,特别是在http://www.lispcast.com/clojure-ubuntu上提供的说明。 现在,在运行并下载相关的jar文件之后,程序退出时会出现一个关于找不到类的错误。该错误如下: 线程“main”java.lang.Exc

  • 问题内容: 到目前为止,这是我的project.clj文件: 和我的core.clj文件: 显示Hello World消息就好了。所以下次我尝试并获得 到目前为止,一切似乎进展顺利,所以我尝试了,然后我收到了 我在这里怎么做错了? 问题答案: 您需要向名称空间添加声明:

  • 问题内容: 我正在制作一个dockerfile来安装elasticsearch:6.5.4并将少量文件添加到所需位置,并运行一个名为test.sh的脚本,以便在Elasticsearch运行时在elasticsearch中创建新索引。 我不确定是否应该使用RUN,CMD或ENTRYPOINT来执行此操作。 我已经通过注释最后一行(包含RUN / CMD / ENTRYPOINT test.sh)成