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] jakobz.livejournal.com 2013-01-17 03:08 pm (UTC)(link)
А вот нельзя в парсер этих ваших скобочек прикрутить хоть проверку на количество параметров? Можно же наверняка в 90% случаев выпалить сколько у тебя функция жрет, и сколько ей скармливают. Или это уже попахивает строгой типизацией и не богоугодно?
Edited 2013-01-17 15:09 (UTC)

[identity profile] artureg.livejournal.com 2013-01-17 03:09 pm (UTC)(link)
про функции высшего порядка слыхали?

[identity profile] jakobz.livejournal.com 2013-01-17 03:11 pm (UTC)(link)
Какая связь между ФВП и количеством аргументов?

[identity profile] artureg.livejournal.com 2013-01-17 03:12 pm (UTC)(link)
а как вы поймете, вам надо функцию вот сейчас передать в другую функцию или результат функции? От этого зависят скобки и то то с точки зрения компилятора верно.

[identity profile] thedeemon.livejournal.com 2013-01-17 03:28 pm (UTC)(link)
Если f принимает 2 аргумента, то
(f a (g x y)) - ok
(f a g x y) - явно не ок

[identity profile] artureg.livejournal.com 2013-01-17 05:59 pm (UTC)(link)
рассмотрим частные случаи:
1. f принимает 2 аргумента f1 принимает 0 аргументов
(f a f1)
(f a (f1))

2. f принимает 2 аргумента f1 принимает 1 аргумент и возвращает f3, f3 принимает 0 аргументов
(f a (f1 b))
(f a ((f1 b)))

домашнее задание:. f принимает 3 аргумента, последний не обязательный

[identity profile] zamotivator.livejournal.com 2013-01-18 02:48 am (UTC)(link)
Артурег, как всегда, нихуя не понял, но поучает.

Никто не говорит про полную проверку типов функций - это в динамически типизированном языке by design не сделаешь. Домашнее задание: найти ответ "почему".
Речь про частичные проверки функций, декларации которых нам известны из внешнего scope

[identity profile] artureg.livejournal.com 2013-01-18 07:52 am (UTC)(link)
как это ни кто? попробуй ещё раз прочитать исходный камент.

(Anonymous) 2013-01-18 12:27 pm (UTC)(link)
> хоть проверку на количество параметров

[identity profile] jakobz.livejournal.com 2013-01-17 03:31 pm (UTC)(link)
Я сразу не разобрался что там макрос с переменным количеством аргументов. Такое не отловить, да.

Насчет как отличить результат от функции - не вижу проблем. В типизированных языках - от х-ля до C#-а - этот вопрос ведь решен как-то. Даже в нетипизированном эрланге все ок вроде как.

[identity profile] metaclass.livejournal.com 2013-01-17 03:59 pm (UTC)(link)
Функции высшего порядка и их арность это вещи друг с другом никак не связанные )

[identity profile] artureg.livejournal.com 2013-01-17 05:47 pm (UTC)(link)
кэп?

[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- пишут не так как вышеприведеном примере.

[identity profile] metaclass.livejournal.com 2013-01-17 03:58 pm (UTC)(link)
Там у макросов и функций количество параметров может быть произвольным :)

[identity profile] jakobz.livejournal.com 2013-01-17 04:00 pm (UTC)(link)
Ну тут макрос с переменным количеством параметров, это я не сразу понял. Но вообще - не все же функции с переменным количеством параметров, можно же это отлавливать.