Sorunun kesin cevabını bilmiyorum, ancak eğitimli tahminim, clojure'un kendisini değiştirmeden yapamayacağınızdır. İşte benim analizi açıklanmıştır:
String
sembol varsayılan eşleştirmeleri (clojure/lang/RT.java
sınıfta DEFAULT_MAPPINGS
başvuran bu sınıfta, içinde Namespace
yapıcısı bakınız) bir parçası olarak clojure/lang/Namespace.java
içinde enterne edilmiştir. Interning, Namespace sınıfının mappings
üye değişkeninde bir anahtar bulunduğu anlamına gelir. Bunun neticesinde, adında her ad alanı, String.class
ile eşlenen String
ile başlar (clojure 1.4.0'da RT.java'nın 77. satırına bakın). Gelen
ns
makro, gibi bir şey yapabilirsiniz: (Clojure 1.4.0 yılında Clojure/core.clj hattı 3770 bakınız)
(ns my-ns
(:refer-clojure :exclude [<mapping to exclude>]))
ama yaptığı tüm yeni semboller stajyerler kod atlamak olduğunu Bu nedenle, ad alanı eşlemelerinden String
'u kaldırmanıza yardımcı olacak hiçbir şey yapamaz. Bir (defn String ...)
gibi bir şeyle String
için eşleme yeniden tanımlamak denerseniz String.class
Var
örneğidir olmadığı için
Son olarak, derleyici şikayet edecektir. Ayrıntılar için clojure 1.4.0 içinde clojure/lang/Compiler.java satır 6797 bakın.
clojure.core ad alanı, java.lang. * Içinde çok sayıda içeriğe bağlıdır. Bu yüzden, bu sınıfları bile yeniden tanımlamak iyi bir fikir olduğundan emin değilim. Örneğin, "str", "keyword", "for", "java.lang.String" sınıfını kullanan işlevler ve makrolardır. –
Bu, makro değil ve çalışma zamanında "Dize" kullanıldıkları sürece bu bir sorun olmamalı. Dahili olarak tamamen nitelikli olduklarından, diğer işlevler tarafından kullanılan clojure.core işlevlerini de hariç tutabilirim. Yani, içte java.lang.String kullanıldığında String kullanıldığında sorun olmamalı. –
Merak etme, _why_ 'Byte' ve 'String' değişkenlerinizi adlandırmanız gerekiyor mu? – Gert