(declare storage)
(defn initialize-storage []) ((def storage
(make-array Integer/TYPE 3 3))
(for [ i (range 1 3 )
j (range 1 3 )]
(aset (aget storage i) j 100)
)
(use 'clojure.pprint)
(pprint storage)
)
我得到以下
ClassCastException [[I cannot be cast to clojure.lang.IFn clojure.lang.Var.fn (Var.java:378)
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
想法是将所有值设置为 100
我怀疑我在 aset 的二维数组上下文中的使用不正确,但这是我经过几个小时的搜索后得到的。
编辑::
(use 'clojure.pprint)
(defn initialize-storage []) ((def storage
(make-array Integer/TYPE 3 3))
(for [ i (range 1 3 )
j (range 1 3 )]
(aset-int storage i j 100))
(pprint storage))
现在,我已经设置了我的存储空间。我想要另一个函数,它将调用此函数,然后继续执行其他任务。但我得到一个找不到的异常initialise-storage
。
在这方面,命名空间有什么帮助?这些功能是否知道彼此的存在,或者我们是否需要将它们公开并公开?所有这些都应该在命名空间内吗?那么如果我将(def ..)放在哪里,因为这也会引发异常?