将记录从一个函数传递到另一个函数,然后在Clojure中分配值
我刚开始学Clojure。我有一个函数,我用键创建一个记录。现在,我希望将记录传递给另一个函数,在这个函数中,我可以将一些数据绑定到标签。我试过了将记录从一个函数传递到另一个函数,然后在Clojure中分配值,clojure,record,Clojure,Record,我刚开始学Clojure。我有一个函数,我用键创建一个记录。现在,我希望将记录传递给另一个函数,在这个函数中,我可以将一些数据绑定到标签。我试过了 (defn structure[] (let [record1 (defrecord rec1 [field1 field2])] record1)) (defn init-structure[record] (def initialized (record. name 23))) (defn -main[] (println (init-str
(defn structure[]
(let [record1 (defrecord rec1 [field1 field2])] record1))
(defn init-structure[record]
(def initialized (record. name 23)))
(defn -main[]
(println (init-structure structure)))
我希望输出为
{:field1 name:field2 23}
。但是,clojure向我抛出了一个“无法解析classname:record”错误……我如何从这里开始?您创建了一个名为rec1
的新记录类型,但后来尝试调用record。
另外,您正在调用init structure
,其中引用了structure
,这可能不是您想要的。
通常,应在函数之外使用以def
开头的特殊形式或函数
下面是一个例子:
(defrecord rec1 [field1 field2])
(defn init-structure []
(rec1. "name" 23))
(defn -main []
(println (init-structure)))
通常,您会使用REPL来处理代码,而不是一直尝试使用
-main
。这是Clojure有趣的事情之一。编写一两个函数,在REPL中进行计算,调用它,看看它是否完成了它应该做的事情。您创建了一个名为rec1
的新记录类型,但后来尝试调用record。
我建议此时不要使用记录。改用地图。使用记录会以不必要的方式“冻结”程序。以后可以从地图切换到记录。另外,广泛使用Clojure规范和Clojure测试。非常感谢..我修改了你的答案,它成功了..我在函数中创建的记录不能作为参数发送给另一个吗?我正在从结构返回record1,我正在考虑在init结构中使用它…我还尝试做一些类似(init结构(structure))…这样结构返回的值就可以被init结构使用…您没有从结构返回记录,而是返回defrecord
的结果,不是唱片本身defrecord
返回一个类对象。Defrecord还创建各种函数来创建实际记录。i、 defrecord实际上更像是一个类型声明,而不是创建一个特定类型的对象