LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

Да лааааадно? А defmethod тогда что делает?

Что-то с памятью моей стало. Помню (или так думаю), что когда-то читал, что defmulti все методы в своём теле определяет. Может было очень давно, может неправда.

И ненужно. Нет, серьёзно, эту говнину потом гарантированно сам автор не поймёт через две недели

Даже в 1С, который очень консервативен, такое добавили (кроме комбинаторов, конечно). Всё-таки возможность добавить перед или после обработчика свой код для определённого типа очень удобна.

Например, хочу я шрифт на кнопках покрупнее сделать. В CL просто добавлю after после on-paint в класс button. А в любом другом надо или менять библиотечную функцию или менять весь код, который выводит кнопки (включая библиотечный), чтобы вместо button выводил my-button.

Для этого binding есть же.

Вот пример: есть у тебя сложная программа и есть в ней функция, меняющая глобальный механизм логирования ошибок (адрес сервера, протокол и прочее).

В Common Lisp у меня просто (setf *logger* new-logger). При этом не ломается нигде, где механизм указан явно или указано, что механизм должен не меняться для блока через (let ((*logger* *logger*)) ...). В современных языках «делайте синглтон и либо всю программу в него, либо тащите его как параметр повсюду». Как в Clojure?

Исходная версия monk, :

Да лааааадно? А defmethod тогда что делает?

Что-то с памятью моей стало. Помню (или так думаю), что когда-то читал, что defmulti все методы в своём теле определяет. Может было очень давно, может неправда.

И ненужно. Нет, серьёзно, эту говнину потом гарантированно сам автор не поймёт через две недели

Даже в 1С, который очень консервативен, такое добавили (кроме комбинаторов, конечно). Всё-таки возможность добавить перед или после обработчика свой код для определённого типа очень удобна.

Например, хочу я шрифт на кнопках покрупнее сделать. В CL просто добавлю after после on-paint в класс button. А в любом другом надо или менять библиотечную функцию или менять весь код, который выводит кнопки (включая библиотечный), чтобы вместо button выводил my-button.

Для этого binding есть же.

Вот пример: есть у тебя сложная программа и есть в ней функция, меняющая глобальный механизм логирования ошибок (адрес сервера, протокол и прочее).

В Common Lisp у меня просто (setf *logger* new-logger). При этом не ломается нигде, где механизм указан явно или указано, что механизм должен не меняться для блога через (let ((*logger* *logger*)) ...). В современных языках «делайте синглтон и либо всю программу в него, либо тащите его как параметр повсюду». Как в Clojure?