clojure1.4.0 > src > jvm > clojure > lang > Namespace.java > intern()


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。



  1. public Var intern(Symbol sym){
  2. if(sym.ns != null)
  3. {
  4. throw new IllegalArgumentException("Can't intern namespace-qualified symbol");
  5. }
  6. IPersistentMap map = getMappings();
  7. Object o;
  8. Var v = null;
  9. while((o = map.valAt(sym)) == null)
  10. {
  11. if(v == null)
  12. v = new Var(this, sym);
  13. IPersistentMap newMap = map.assoc(sym, v);
  14. mappings.compareAndSet(map, newMap);
  15. map = getMappings();
  16. }
  17. if(o instanceof Var && ((Var) o).ns == this)
  18. return (Var) o;
  19.  
  20. if(v == null)
  21. v = new Var(this, sym);
  22.  
  23. warnOrFailOnReplace(sym, o, v);
  24.  
  25.  
  26. while(!mappings.compareAndSet(map, map.assoc(sym, v)))
  27. map = getMappings();
  28.  
  29. return v;
  30. }
  31.