矢量和地图可以充当从钥匙中获取其元素的功能
([1 2 3] 2) ;=> 3
({:a 1 :b 2} :a) ;=> 1
Run Code Online (Sandbox Code Playgroud)
但为什么我不能这样做列表?
('(1 2 3) 2)
;clojure.lang.PersistentList cannot be cast to clojure.lang.IFn(java.lang.ClassCastException)
Run Code Online (Sandbox Code Playgroud)
我认为在这种情况下错误消息非常具有描述性.持久列表不实现IFn,因此不能充当函数.这是Clojure设计的选择,原因可能是数据List结构不是为随机访问而设计的(逐个元素获取),因为这种操作的复杂性O(n)比矢量更糟糕O(log(n)).