gpt4 book ai didi

Clojure:Lein 运行无法解析符号

转载 作者:行者123 更新时间:2023-12-02 06:35:54 25 4
gpt4 key购买 nike

我刚刚开始使用 lein 开始我的第一个 clojure 项目,代码如下:

(ns fileops.core
(:use
[clojure.core :only (slurp)]
[clojure-csv.core :only (parse-csv)]
[fileops.core]))

(defn -main
"I don't do a whole lot ... yet."
[& args]
(read-file "sample.csv"))

(defn read-file
"open and read the csv file"
[fname]
(with-open [file (clojure.java.io/reader fname)]
(parse-csv (slurp fname))))

我尝试使用“lein run”运行它,但我不断收到此错误:

Caused by: java.lang.RuntimeException: Unable to resolve symbol: read-file in this context
at clojure.lang.Util.runtimeException(Util.java:219)
at clojure.lang.Compiler.resolveIn(Compiler.java:6874)
at clojure.lang.Compiler.resolve(Compiler.java:6818)
at clojure.lang.Compiler.analyzeSymbol(Compiler.java:6779)
at clojure.lang.Compiler.analyze(Compiler.java:6343)
... 52 more

我做错了什么?

最佳答案

使用了 clojure 核心中的 slurp,这意味着您现在无法使用所有其他核心功能:) 尝试更改您的 ns 以使用 :require 而不是 :use,因为这更惯用。

需要注意的一点是,在 clojure 中,顺序确实很重要,因此,如果您不在文件顶部声明函数(如 C 和其他一些语言中那样),则较早的函数将无法引用他们。这就是之前导致错误的原因,也是我喜欢在底部定义 -main 函数的原因。这是风格问题。

另一件事是您的 -main 函数现在正在获取变量参数而不是使用它们。在 Clojure 中,习惯使用 _ 来引用不被使用的参数。您可以使用 & _ 来避免错误消息,因为当用户传递不必要的参数时,但我只是让 -main 函数从一开始就没有参数。这是因为运行程序时不需要向 main 提供任何内容,并且错误确实使调试更容易。很高兴知道正在使用什么以及在哪里使用。 sample.csv 文件已提供,并且正在调用 read-file,因此如果您的 read-file 函数,则程序应该运行是正确的,并且 sample.csv 文件位于正确的位置。

关于您的 -main 函数,最好在那里进行一些测试,看看它在运行时是否正确执行,所以我将其更改为打印出 csv 的内容文件到您的控制台。这种从文件打印的方式非常高效,本身就值得研究。

最后,请确保在 project.clj 文件中包含 clojure-csv.core

核心.clj:

(ns fileops.core
(:require
[clojure-csv.core :refer [parse-csv]]))

(defn read-file
"open and read the csv file"
[fname]
(with-open [file (clojure.java.io/reader fname)]
(parse-csv (slurp fname))))

(defn -main []
(println (clojure.string/join "\n" (read-file "resources/test.csv"))))

项目.clj:

...

:dependencies [[org.clojure/clojure "1.5.1"]
[clojure-csv/clojure-csv "2.0.1"]
...]
:main fileops.core

您需要将 fileops.core 声明为 :main,如上所示。这告诉 Leiningen 当您输入 lein run 时要执行什么函数。非常重要且棘手的事情。

现在请确保您位于项目目录的根目录中,并在终端上运行以下命令:

lein clean
lein deps
lein run

祝你好运!

进一步阅读:

8th light blog on name-spaces

flying machine studios explanation of lein run

关于Clojure:Lein 运行无法解析符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23717331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com