我刚开始学习Clojure,我有自己的Clojure脚本,但是它没有返回我所希望的输出(Hello World)。这是我的代码:
(ns com.playground.core
(:gen-class))
(defn -main
[]
((defn CHEESE
[]
(str "Hello World"))
(CHEESE)))这是我在REPL中得到的输出:
clj꞉com.playground.core꞉>
#'com.playground.core/-main我想在输出中看到Hello World。
发布于 2022-04-28 18:36:42
你在那里有两个括号。试试这个:
(defn -main
[]
(defn CHEESE
[]
(str "Hello World"))
(CHEESE))当然,您必须调用-main,否则您将什么也看不到:
(defn -main
[]
(defn CHEESE
[]
(str "Hello World"))
(CHEESE))
=> #'com.playground.core/-main
(-main)
=> "Hello World"我看到您在另一个函数中定义了一个函数。为此,您应该使用let或letfn。
发布于 2022-05-02 09:37:36
为项目启动REPL不会运行-main。运行您的程序将产生以下结果:
Execution error (ArityException) at com.playground.core/-main (core.clj:6).
Wrong number of args (1) passed to: com.playground.core/-main/CHEESE--177这是怎么回事?
defn表单在com.playground.core命名空间中创建和注册一个名为CHEESE的函数。defn表单返回创建的var,它的计算结果是包含((defn ...) (CHEESE))表单的CHEESE函数应用于(CHEESE),这是计算CHEESE函数时没有参数的结果,H 216H 117.是字符串"Hello World".。
参数是什么并不重要,因为CHEESE没有第1次调用:您不能将它应用于任何参数。
通过将defn for CHEESE从-main中提取出来,您可以获得同样的(坏的)效果。当我们完成这个任务时,让我们放弃str,它没有任何效果:
(defn CHEESE []
"Hello World")
(defn -main []
(CHEESE (CHEESE)))
Execution error (ArityException) at com.playground.core/-main (core.clj:8).
Wrong number of args (1) passed to: com.playground.core/CHEESE为了纠正这个问题,我们简单地删除了(CHEESE)参数:
(defn -main []
(CHEESE))生产..。
Process finished with exit code 0没有返回值,但至少它运行。但是如果我们在REPL中评估(-main),.
(-main)
=> "Hello World"那里。
发布于 2022-05-13 21:56:39
事实上,这并不是完全错误的。这种返回是“申报的返回”。
例如,您在-main命名空间中定义了一个com.playground.core。
返回是此声明#'com.playground.core/-main的符号。
要打印Hello world消息,需要在声明后调用函数CHEESE。

所以..。关于双括号,这不是好事,但不影响他。另一点是函数名,它也不好。考虑用烤肉串。
您还可以考虑更显式地保留函数声明。类似这样的事情;
(ns com.playground.core
(:gen-class))
(defn CHEESE [] (str "Hello World"))
(defn -main []
(CHEESE))但同时你也没在打印“你好世界”。您只声明一个返回字符串类型的函数(奶酪)。
要打印,您需要调用一个打印函数。
(ns com.playground.core
(:gen-class))
(defn hello [] (str "Hello World"))
(defn -main []
(print (hello)))我做了声明的演变来更好地解释

因此,可以使用let alternative和threading macros改进代码。
考虑使用https://kimh.github.io/clojure-by-example/和https://tryclojure.org/更好地理解这些选项:)
https://stackoverflow.com/questions/72048648
复制相似问题