首页 > 解决方案 > Clojure 中的列表或向量如何用于存储和使用函数?

问题描述

这是我在 REPL 中尝试过的。

(def mstuffs [(fn [n] (* 1 n)) (fn [n] (* 1 n))])
((mstuffs first) 2)

这是我得到的错误

; Execution error (IllegalArgumentException) at nrepl.middleware.interruptible-eval/evaluate$fn$fn (interruptible_eval.clj:87).
; Key must be integer

我究竟做错了什么?

标签: functioncollectionsclojure

解决方案


clojure 中的向量是从索引到相应项目的函数,例如

([:foo :bar :baz] 1)
=> :bar

(mstuffs first)尝试mstuffs使用参数索引向量也是如此first。由于first是一个函数而不是整数,因此您会得到结果异常。看起来你的意思是调用向量中的第一个函数,所以应该使用

((first mstuffs) 2)

推荐阅读