От чтения лисповских книг, которую я помню, что они показали пример метода диспетчера ООП стиле, основанный на закрытиях:Как работает интеллектуальное завершение кода в схеме?
(defun create-object()
(let ((val 0)
(get (lambda() val))
(set (lambda (new-val) (setq val new-val)))
(inc (lambda() (setq val (+ 1 val)))))
(lambda (method)
(cond ((eq method 'get)
get)
((eq method 'set)
set)
((eq method 'inc)
inc)))))
(let ((obj (create-object)))
(funcall (obj 'set) 1)
(funcall (obj 'inc))
(funcall (obj 'get))) ;; 2
Поскольку это просто функция строки символа аргумент а, я думаю, код Intel выиграл» Здесь вам будет очень полезной помощь, не заполняя имена методов или их подписи. (Сравните с аналогичным объектом JavaScript.)
Является ли эта проблема в целом решена? Как вы программируете объектную систему в Схеме, чтобы редактор (например, Emacs) мог быть более интеллектуальным с вашим кодом?
P.S. Пример может быть недействительным кодом схемы, но вы должны получить эту идею.
вы могли бы иметь специальную функцию, как в Python '__dir__' который будет возвращать все возможные ключи, может использоваться на объекте. –
Просто потому, что OOP _can_ будет реализован таким образом, не означает, что он обычно _is_. Но даже здесь использование 'eq' в строках обычно не является хорошей идеей, поэтому было бы более распространено сравнивать символы (например,' (eq method 'get) ') и выполнять завершение на основе символов, которые читатель видел просто. –