Clojure中如何用列表或vector存储使用函数?代码报错如何解决?
问题原因分析
你的代码报错核心是vector元素调用的语法顺序写反了。
Clojure中vector本身支持作为函数使用,接收的参数必须是整数类型的下标索引,你的写法(mstuffs first)是将first函数作为入参传给vectormstuffs,不符合vector作为函数的入参要求,因此抛出Key must be integer的非法参数错误。
正确写法
你可以选择两种常用写法调用存储在vector中的函数:
- 先用
first取出vector中第一个元素再调用
((first mstuffs) 2) ;; 输出结果为 2
- 直接用vector作为索引函数,传入整数下标取出函数再调用
((mstuffs 0) 2) ;; 输出结果为 2
扩展说明
如果用List存储函数,调用逻辑完全一致,只需要适配List集合的元素获取语法即可:
;; 用List存储函数示例 (def mstuffs-list '((fn [n] (* 1 n)) (fn [n] (* 1 n)))) ;; 调用第一个函数 ((first mstuffs-list) 2)
内容的提问来源于stack exchange,提问作者Lee
相关产品推荐
相关产品推荐

