Доступ к содержимому ячейки функции
Определение функции символа — это объект, хранящийся в ячейке функции символа. Здесь описаны функции, которые позволяют получить доступ к ячейке функции символов, проверить её и установить значение.
См. также функцию indirect-function. См. Определение косвенной функции.
- Функция: symbol-function символ
-
Возвращает объект в ячейке функции символа. Она не проверяет, является ли возвращаемый объект законной функцией.
Если ячейка функции пуста, возвращаемое значение —
nil. Чтобы отличить пустую ячейку функции от ячейки, установленной в значениеnil, используйтеfboundp(см. ниже).(defun bar (n) (+ n 2)) (symbol-function 'bar) ⇒ (lambda (n) (+ n 2))(fset 'baz 'bar) ⇒ bar(symbol-function 'baz) ⇒ bar
Если вы никогда не задавали символ функции, мы говорим, что ячейка функции этого символа пуста. Другими словами, ячейка функции не содержит никакого объекта Lisp. Если вы попытаетесь вызвать символ как функцию, Emacs сообщит об ошибке void-function.
Обратите внимание, что пустота не то же самое, что nil или символ void. Символы nil и void — это объекты Lisp, и их можно сохранить в ячейку функции так же, как и любой другой объект (и они могут быть действительными функциями, если вы определите их в свою очередь с помощью defun). Пустая ячейка функции не содержит ни одного объекта.
Вы можете проверить пустоту определения функции символа с помощью fboundp. После того, как вы задали символу определение функции, вы можете сделать его пустым ещё раз с помощью fmakunbound.
- Функция: fboundp символ
Эта функция возвращает
t, если символ имеет объект в своей ячейке функции,nilв противном случае. Она не проверяет, является ли объект законной функцией.
- Функция: fmakunbound символ
-
Эта функция делает ячейку функции символа пустой, так что последующая попытка доступа к этой ячейке вызовет ошибку
void-function. Она возвращает символ. (См. такжеmakunbound, в Пустые переменные.)(defun foo (x) x) (foo 1) ⇒1(fmakunbound 'foo) ⇒ foo(foo 1) error→ Symbol's function definition is void: foo
- Функция: fset символ определение
-
Эта функция сохраняет определение в ячейке функции символа. Результатом является определение. Обычно определение должно быть функцией или именем функции, но это не проверяется. Аргумент символ — это обычный аргумент, подлежащий вычислению.
Основное использование этой функции — в качестве подпрограммы конструкций, которые определяют или изменяют функции, таких как
defunилиadvice-add(см. Консультирование функций). Вы также можете использовать её, чтобы присвоить символу определение функции, которое не является функцией, например, макрос клавиатуры (см. Макросы клавиатуры):;; Define a named keyboard macro. (fset 'kill-two-lines "\^u2\^k") ⇒ "\^u2\^k"Если вы хотите использовать
fsetдля создания альтернативного имени функции, рассмотрите использованиеdefaliasвместо этого. См. Определение defalias.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Function-Cells.html