我最近开始学习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中的代码的正确方法是什么?
没有愚蠢的问题!:-)
让我们检查一下您定义的函数:
(defn sum [x y] (+ x y))
这是一个接受两个参数的函数,x
和y
。在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
我敢打赌,有很多方法可以使用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)成