在Clojure中用什么来代替类和对象?你能提供一个例子吗?

Mai*_*tor 3 oop class clojure

你能举例说明一个人如何代表一个具有可变属性的"玩家"类,如HP和位置(3d矢量),init,setter和getter等函数?

mik*_*era 12

在真正惯用的Clojure中,你的"玩家"将是不可变的,你可能会将其表示为地图,例如:

{:type        :player
 :team        :red
 :hit-points  10
 :location    [17 9 6]} 
Run Code Online (Sandbox Code Playgroud)

玩家可能包含在更大的"世界"数据结构中,并且会有一个纯函数update-world可以创建一个具有任何必要修改的新世界(例如将玩家移动到新位置).

至于getter/setter - 只需使用法线贴图操作函数.在您操作标准Clojure数据时,通常不需要getter/setter.