Từ mã nguồn Clojure, lang/LispReader.java
:
static private Object interpretToken(String s) throws Exception{
if(s.equals("nil"))
{
return null;
}
Từ lang/RT.java
:
static public void print(Object x, Writer w) throws Exception{
{
...
if(x == null)
w.write("nil");
Vì vậy nil
là đại diện Clojure cho các nền tảng cơ bản của null
. nil
không hiển thị ở nơi nào khác trong nguồn Java cho Clojure. Sự khác biệt duy nhất giữa nil
và null
là một trong đó là Clojure và một là Java, nhưng chúng thực chất là bí danh, được chuyển đổi qua lại liên tục khi cần thiết bởi người đọc và máy in khi chuyển từ Clojure sang Java sang Clojure.
Vâng, nil
có thể gây ra NullPointerException
s. Thử gọi bất kỳ phương thức Java nào trên nil
, bạn sẽ nhận được một NPE, ví dụ:
(.tostring nil)
Mã nguồn Clojure khá dễ đọc khi nói đến những thứ như thế này, hãy cho nó xem.
Nguồn
2009-03-28 03:58:43
Không nhất thiết. :-) Tôi cũng có một lớp java trong traceback. –