Ноль Clojure по сравнению с пустым указателем Java?

Пожалуйста, попробуйте это.

  Select * from (select A.id,A.time,A.link, ROW_NUMBER() OVER(partition by A.id order by A.time desc)As row_num from @tbl  A )AS AA Where AA.row_num =1  

ИЛИ

select A.id,A.time,A.link from test  A
    order by A.time desc
    limit 1
29
задан Jason Baker 28 March 2009 в 00:57
поделиться

2 ответа

От изучения Clojure

"На большинстве диалектов Lisp существует значение, полуэквивалентное пустому указателю Java, названному нолем. В Clojure ноль является просто нулевым значением Java, концом истории".

Так как Clojure компилирует в байт-код Java, он кажется, что любая ссылка на ноль является просто ссылкой несуществующего объекта в базовой JVM. Ваши NPEs от выполнения Clojure являются результатом доступа к нолю.

23
ответ дан John Ellinwood 28 November 2019 в 01:11
поделиться

От исходного кода 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 может вызвать NullPointerExceptions. Попытайтесь обратиться к любому методу Java nil, Вы получите NPE, например.

(.tostring nil)

Исходный код Clojure довольно легко считать когда дело доходит до вещей как это, посмотреть на него.

44
ответ дан Brian Carper 28 November 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: