Из исходного кода Clojure, lang/LispReader.java
:
static private Object interpretToken(String s) throws Exception{
if(s.equals("nil"))
{
return null;
}
С lang/RT.java
:
static public void print(Object x, Writer w) throws Exception{
{
...
if(x == null)
w.write("nil");
Итак, nil
- это представление Clojure для базовой платформы null
. nil
больше нигде не обнаруживается в исходном коде Java для Clojure. Единственное различие между nil
и null
состоит в том, что одним является Clojure, а другим - Java, но они, по сути, являются псевдонимами, которые без проблем конвертируются назад и вперед по мере необходимости читателем и принтером при переходе от Clojure к Java на Clojure.
Да, nil
может вызвать NullPointerException
с. Попробуйте вызвать любой метод Java на nil
, вы получите NPE, например,
(.tostring nil)
Исходный код Clojure довольно легко читается, когда дело доходит до таких вещей, посмотрите на него.