在clojure中,您可以使用地图数据结构或关键字作为查找地图的函数。
(let [m {:foo "bar"}]
(get m :foo) ; -> "bar"
(:foo m) ; -> "bar"
(m :foo)) ; -> "bar"
所有这些表达式都返回值“bar”。实施明智,如何使用map或关键字作为函数?这是一个内置于clojure解释器的特殊情况,还是我可以用该语言重新创建的东西?引擎盖下究竟发生了什么?
答案 0 :(得分:4)
所有这一切都在普通的java下完成。
有一个名为iFn的接口,Clojure中任何想要作为函数调用的东西都可以实现。决定在被叫时做什么就可以了。
答案 1 :(得分:2)
向您展示如何在任何具有一流功能的语言中实现这一点 - 下面的JavaScript示例;运行它来查看结果!



const map = x => a =>
 a === undefined? x:a(map(x))

 const get = m => a =>
 a(m)

 const accessor = k => m =>
 m()[k]

 // make accessor
 const foo = accessor('foo')
 
 //制作地图
让m = map({foo:'bar'})

 //测试表达式
 //应用于map和accessor:
 console.log(get(m)(foo))// bar
&# xD;
 //访问器应用于map:
 console.log(foo(m))// bar

 //地图应用于访问者:
 console.log(m(foo))// bar