gpt4 book ai didi

clojure - 对类名的解析感到困惑

转载 作者:行者123 更新时间:2023-12-02 23:13:34 24 4
gpt4 key购买 nike

两个文件

类型.clj:

(ns test.types)

(defrecord Price [date price])
(defrecord ProductPrice [name prices])

core.clj(没问题)

(ns test.core
(:use [test.types])
(:use [clojure.string :only (split)]))


(defn read-data [file]
(let [name (subs (.getName file) 0 4)]
(with-open [rdr (clojure.java.io/reader file)]
(doall (map #(apply ->Price (split % #"\t")) (drop 2 (line-seq rdr)))))))

core.clj(java.lang.IllegalArgumentException:无法解析类名:ProductPrice)

(ns test.core
(:use [test.types])
(:use [clojure.string :only (split)]))


(defn read-data [file]
(let [name (subs (.getName file) 0 4)]
(with-open [rdr (clojure.java.io/reader file)]
(ProductPrice. name (doall (map #(apply ->Price (split % #"\t")) (drop 2 (line-seq rdr))))))))

core.clj(没问题)

(ns test.core
(:use [test.types])
(:use [clojure.string :only (split)]))

(defrecord tProductPrice [name prices])
(defn read-data [file]
(let [name (subs (.getName file) 0 4)]
(with-open [rdr (clojure.java.io/reader file)]
(tProductPrice. name (doall (map #(apply ->Price (split % #"\t")) (drop 2 (line-seq rdr)))))))

core.clj(java.lang.IllegalStateException:->ProductPrice已引用:#'test.types/-> namespace 中的ProductPrice:test.core)

(ns test.core
(:use [test.types])
(:use [clojure.string :only (split)]))

(defrecord ProductPrice [name prices])
(defn read-data [file]
(let [name (subs (.getName file) 0 4)]
(with-open [rdr (clojure.java.io/reader file)]
(ProductPrice. name (doall (map #(apply ->Price (split % #"\t")) (drop 2 (line-seq rdr)))))))

我对这些异常(exception)完全感到困惑。除了 clojure.org 和书籍中的一些最简单的示例之外,我找不到更多关于“记录”的用法。

任何帮助,非常感谢!

最佳答案

defrecord 在以当前 namespace 命名的包中创建一个 java 类。 (ProductPrice. ...) 是对该类型的构造函数的调用;这是 Java 互操作 - 不是普通的函数调用。

除非显式地导入它或指定完整的包名称,否则您不能引用在 java.lang 或当前命名空间之外定义的类。这包括调用其构造函数。

因此,要解决该问题,您需要导入 Price 和 ProductPrice。

 (ns test.core (:import [test.types Price]))
(Price. ...)

或者调用完整的类+包名:

 (test.types.Price. ...)

关于clojure - 对类名的解析感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10005423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com