我在写实体组件系统。我计划的一部分是有一个名为System的协议,系统要使用ECS就必须完成该协议。
问题是,如果我尝试创建一个名为System的协议,Clojure就会抱怨;这似乎是因为它与java.lang.System冲突。
(ns entity.system)
(defprotocol System
; Protocol methods)收益率
compiling:(C:\Users\slomi\IdeaProjects\entity\src\entity\system.clj:3:1):CompilerException java.lang.RuntimeException:期望var,但系统映射到类java.lang.System,java.lang.System
我试图通过同时添加System和(:refer-clojure :exclude [java.lang.System])来排除(:refer-clojure :exclude [System]),但两者都没有做任何事情;我再次收到了相同的错误。
当然,我可以将其命名为其他名称,但System似乎是最合适的名称,而像entity.entity-system/Entity-System甚至entity.system/Entity-System这样的名称似乎过于多余。
如何将java.lang.System排除在命名空间之外?
发布于 2016-09-26 23:32:26
你要找的是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"https://stackoverflow.com/questions/39712564
复制相似问题