metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-01-17 04:59 pm
Entry tags:

Немножко динамической типизации и кложури

Макрос with-db-comment выполняет указанную функцию с параметрами в контексте коннект+транзакция, с логом комментария к транзакции в БД.
dump-seq-debug скармливает последовательность в log4j для отладки.

вот такое падает с NPE:
(with-db-comment "(get-subaccounts 20)"
(dump-seq-debug (get-subaccounts "20")))

вот такое работает:
(with-db-comment "(get-subaccounts 20)"
dump-seq-debug (get-subaccounts "20"))

Можно ли увидеть разницу с первого раза и понять, откуда там NPE? :)

Вот эта содомия с лишними или пропущенными скобками, не обнаруживаемыми компилятором работу с кложурелиспами делает немного неудобной.
И практически не пригодной для осмысленного использования людьми без встроенной типовыводилки в голове.

[identity profile] asvil (from livejournal.com) 2013-01-17 03:21 pm (UTC)(link)
в конкретном примере не ФВП, а макрос, который видимо принимает неопределённое кол-во параметров.
С другой стороны если это макрос, то сделан он как-то криво. with- макросы не принимают что-либо для дергания, а принимают "контекст" (назовем его так) и тело для выполнения, правда это не обязательство, а хороший тон.

Тут вообще наезд настолько специфический, что больше похоже на бред, а не на реальный наезд.

[identity profile] metaclass.livejournal.com 2013-01-17 04:00 pm (UTC)(link)
Тело может быть и f и (f) - оба формально валидны.

[identity profile] asvil (from livejournal.com) 2013-01-17 04:07 pm (UTC)(link)
Это понятно, фишка в том, что по хорошему макрос with- пишут не так как вышеприведеном примере.