clojure地图和关键字如何成为一种功能

时间:2017-05-09 04:52:28

标签: clojure functional-programming

在clojure中,您可以使用地图数据结构或关键字作为查找地图的函数。

(let [m {:foo "bar"}]
  (get m :foo) ; -> "bar"
  (:foo m)     ; -> "bar"
  (m :foo))    ; -> "bar"

所有这些表达式都返回值“bar”。实施明智,如何使用map或关键字作为函数?这是一个内置于clojure解释器的特殊情况,还是我可以用该语言重新创建的东西?引擎盖下究竟发生了什么?

2 个答案:

答案 0 :(得分:4)

所有这一切都在普通的java下完成。

有一个名为iFn的接口,Clojure中任何想要作为函数调用的东西都可以实现。决定在被叫时做什么就可以了。

  • 关键字选择在作为第一个参数传递的集合中自我查找。
  • 地图选择查找作为关键字传递的参数。
  • 符号也可以在集合中看起来自我。很像关键字。
  • Vars使用它们传递的任何参数对它们包含的任何函数进行函数调用。他们使用相同的界面来完成它。

答案 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  



& #xA;
&#的xD;