Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure Can';不要创建系统协议_Clojure_Protocols - Fatal编程技术网

Clojure Can';不要创建系统协议

Clojure Can';不要创建系统协议,clojure,protocols,Clojure,Protocols,我正在写一封信。我计划的一部分是建立一个名为System的协议,系统必须满足该协议才能使用ECS 问题是,如果我试图创建一个名为System的协议,Clojure会抱怨;似乎是因为它与java.lang.System冲突 (ns entity.system) (defprotocol System ; Protocol methods) 屈服 CompilerException java.lang.RuntimeException:应为var,但系统映射到类java.lang.Syste

我正在写一封信。我计划的一部分是建立一个名为
System
的协议,系统必须满足该协议才能使用ECS

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

(ns entity.system)

(defprotocol System
  ; Protocol methods)
屈服

CompilerException java.lang.RuntimeException:应为var,但系统映射到类java.lang.System,编译:(C:\Users\slomi\IdeaProjects\entity\src\entity\System.clj:3:1)

我尝试通过添加
(:refereclojure:exclude[System])
(:refereclojure:exclude[java.lang.System])
来排除
系统,但都没有做任何事情;我又收到了同样的错误

当然,我可以给它起个别的名字,但是
System
似乎是最合适的名字,比如
entity.entity-System/entity-System
或者甚至
entity.System/entity-System
似乎太多余了


如何将
java.lang.System
从名称空间中排除?

您要查找的是
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"

可爱。非常感谢。