在多个名称空间中使用记录

Sta*_*lin 1 namespaces function record clojure

我有一些带有一些预定义功能和记录的clojure文件

;outer.clj
(ns outer )
(defn foo [a] (println a))
(defrecord M [id])
Run Code Online (Sandbox Code Playgroud)

现在用法文件

;inner.clj
(ns inner (:use outer ))
(foo 2)    ;works fine
(println (:id (M. 4))) ;throws IllegalArgumentException: Unable to resolve classname: M
Run Code Online (Sandbox Code Playgroud)

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

sw1*_*1nn 5

因为defrecord在'封面'下生成一个JVM类,你需要导入该类...

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