首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法创建系统协议

无法创建系统协议
EN

Stack Overflow用户
提问于 2016-09-26 21:17:20
回答 1查看 62关注 0票数 3

我在写实体组件系统。我计划的一部分是有一个名为System的协议,系统要使用ECS就必须完成该协议。

问题是,如果我尝试创建一个名为System的协议,Clojure就会抱怨;这似乎是因为它与java.lang.System冲突。

代码语言:javascript
复制
(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排除在命名空间之外?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-26 23:32:26

你要找的是ns-unmap

代码语言:javascript
复制
(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"
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39712564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档