我正在编写一个实体组件系统(Entity Component System)。我的计划中有一个名为System
的协议,每个系统必须遵守这个协议才能使用ECS。
问题在于,如果我尝试创建一个名为System
的协议,Clojure会报错,似乎是因为与java.lang.System
冲突。
(ns entity.system)
(defprotocol System
; Protocol methods)
yields
编译器异常 java.lang.RuntimeException: 预期 var,但 System 被映射到类 java.lang.System,compiling:(C:\Users\slomi\IdeaProjects\entity\src\entity\system.clj:3:1)
我尝试通过添加 (:refer-clojure :exclude [System])
和 (:refer-clojure :exclude [java.lang.System])
来排除System
,但都没有任何作用;我收到了同样的错误信息。
当然,我可以给它起一个别的名字,但是System
似乎是最合适的名称,像entity.entity-system/Entity-System
或者entity.system/Entity-System
这样的名称显得过于冗长。
我该如何从命名空间中排除java.lang.System
?