我正在写Entity Component System。我计划的部分目标是建立一个系统必须满足的协议System
才能使用ECS。
问题是,如果我尝试创建一个名为System
的协议,Clojure会抱怨;似乎是因为它与java.lang.System
冲突。
(ns entity.system)
(defprotocol System
; Protocol methods)
产量
CompilerException java.lang.RuntimeException:期望var,但是System被映射到类java.lang.System,编译:(C:\ Users \ slomi \ IdeaProjects \ entity \ src \ entity \ system.clj:3:1 )
我尝试通过添加System
和(:refer-clojure :exclude [System])
来排除(:refer-clojure :exclude [java.lang.System])
,但都没有做任何事情;我再次收到同样的错误。
当然我可以将其他名称命名为其他名称,但System
似乎是最合适的名称,entity.entity-system/Entity-System
甚至entity.system/Entity-System
之类似乎过于冗余。
如何从命名空间中排除java.lang.System
?
答案 0 :(得分:4)
您正在寻找的是ns-unmap
(ns-unmap *ns* 'System)
(defprotocol System
(add [this that]))
(extend-protocol System
Long
(add [this that]
(format "%d + %d is %d" this that (+ this that))))
(add 2 3)
;;=> "2 + 3 is 5"