So, I'm trying to learn the internal elements of Clojure, and I came across the fact that I'm not quite sure that I understand:
From REPL, I can access RT.var ("clojure.core", "require") just fine (this should return the var associated with the "require" character in "clojure". Core "):
user=> (clojure.lang.RT/var "clojure.core" "require")
However, if I try to access it in what I thought was the same (
user=> (clojure.lang.Var/intern (clojure.lang.Namespace/findOrCreate (clojure.lang.Symbol/intern nil "clojure.main")) (clojure.lang.Symbol/intern nil "require"))
java.lang.IllegalStateException: require already refers to:
I get an error that requires already applies to what exists. This is very strange because RT.var is the same as Var.intern, with the exception of arguments converted to a namespace and a character, respectively.
static public Var var(String ns, String name){
return Var.intern(Namespace.findOrCreate(Symbol.intern(null, ns)), Symbol.intern(null, name));
}
, . :
1. nil - , null
2. var2, , Var.intern, var3, , Var.intern. Var.intern:
user=> (clojure.lang.Var/intern
(clojure.lang.RT/var2 "clojure.main" "require")
(clojure.lang.RT/var3 "clojure.main" "require"))
java.lang.IllegalStateException: require already refers to:
?