簡體   English   中英

在多個名稱空間中使用記錄

[英]Use record in several namespaces

我有一些預定義功能和記錄的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

盡管sw1nn是正確的,但從1.3開始,您無需進行單獨的導入。 defrecorddeftype可以創建構造函數,就像其他函數一樣,可以通過use / require

兩者創建的函數均采用->MyType形式->MyType->MyType位置參數。

此外, defrecord創建了第二個構造函數,該函數接受一個映射arg map->MyRecord

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM