archimag / cl-closure-template

Common Lisp implementation of Google's Closure Templates.
Other
71 stars 23 forks source link

User functions #20

Closed EvilTosha closed 11 years ago

EvilTosha commented 11 years ago

Добавлена возможность добавлять свои функции (для вызова напрямую из шаблона). Соответствующая функция экспортирована.

archimag commented 11 years ago

Привет.

Всё хорошо, но только одна просьба. Необходимо также добавить макрос with-user-function или лучше with-user-functions, что бы можно было писать:

(with-user-functions (("myFun1" #'my-fun1) ("myFun2" #'my-fun2))
  ..)

Смысл в том, что бы не модифицировать глобально user-functions и possible-function (во избежание потенциальных конфликтов).

EvilTosha commented 11 years ago

Немного не ясна цель макроса. В каких ситуациях он будет использоваться?

archimag commented 11 years ago

Что будет, если две разных библиотеки добавят пользовательские функции с одинаковыми именами? Какая-то из них будет неправильно работать. Защитить себя от возможных конфликтов можно так:

(let ((closure-template::*user-functions* closure-template::*user-functions*)
      (closure-template.parser::*possible-functions* closure-template.parser::*possible-functions*))
  (closure-template:add-user-function "myFun1" #'my-fun1)
  (closure-template:add-user-function "myFun2" #'my-fun2)
  ...)

Но это слишком многословно, а символы closure-template::user-functions и closure-template.parser::possible-functions не экспортированы и являются внутренней деталью реализации.

EvilTosha commented 11 years ago

Добавил макрос. Но так как переменные динамические, замыкание с функциями сделать не получится =( Еще не уверен насчет докстринга, правильный ли формат?