![](/img/trans.png)
[英]PHP 5.3 Namespaces should i use every PHP function with backslash?
[英]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開始,您無需進行單獨的導入。 defrecord
和deftype
可以創建構造函數,就像其他函數一樣,可以通過use
/ require
。
兩者創建的函數均采用->MyType
形式->MyType
並->MyType
位置參數。
此外, defrecord
創建了第二個構造函數,該函數接受一個映射arg map->MyRecord
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.