z kodu źródłowego Clojure, lang/LispReader.java
:
static private Object interpretToken(String s) throws Exception{
if(s.equals("nil"))
{
return null;
}
Od lang/RT.java
:
static public void print(Object x, Writer w) throws Exception{
{
...
if(x == null)
w.write("nil");
Więc nil
jest reprezentacja Clojure dla podstawowa platformy null
. nil
pojawia się nigdzie indziej w źródle Javy dla Clojure. Jedyna różnica między nil
i null
polega na tym, że jednym z nich jest Clojure, a drugi to Java, ale w gruncie rzeczy są to aliasy, konwertowane płynnie w zależności od potrzeb czytnika i drukarki podczas przechodzenia z Clojure na Java do Clojure.
Tak, nil
może spowodować NullPointerException
s. Spróbuj wywołać dowolną metodę Java na nil
, otrzymasz NPE, np.
(.tostring nil)
Kod źródłowy Clojure jest dość łatwy do odczytania, jeśli chodzi o takie rzeczy, to spójrz.
Niekoniecznie. :-) Mam również klasę java w tracebacku. –