function - 在多个命名空间中使用记录

标签 function clojure namespaces record

我有一些带有一些预定义函数和记录的 clojure 文件

;outer.clj
(ns outer )
(defn foo [a] (println a))
(defrecord M [id])

现在使用文件
;inner.clj
(ns inner (:use outer ))
(foo 2)    ;works fine
(println (:id (M. 4))) ;throws IllegalArgumentException: Unable to resolve classname: M

为什么函数导入正常但记录定义没有?我应该如何导入它?

最佳答案

因为 defrecord 会在“幕后”生成一个 JVM 类,所以您需要导入该类...

;inner.clj
(ns inner 
    (:use outer )
    (:import outer.M)
(foo 2)    ;works fine
(println (:id (M. 4))) ; works with import

关于function - 在多个命名空间中使用记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11773357/

相关文章:

java - 如何在 Clojure 中直接使用位?

clojure - 如何将两个参数的函数映射到列表?

Python:如何获取调用函数的文件的绝对路径?

function - Haskell 中缀函数应用优先级

php - 在函数参数中使用单管道 '|' 有什么作用?

python - 如何在Python中化简分数?

clojure - 在嵌套树结构的每个分支中插入所有父分支的总和

c++ - 在命名空间中定义一个函数

namespaces - 使用 C++/CLI 时的长/复合命名空间

C++在main中调用类的静态函数