Spec-Zone.ru › Elisp

Доступ к содержимому ячейки функции

Определение функции символа — это объект, хранящийся в ячейке функции символа. Здесь описаны функции, которые позволяют получить доступ к ячейке функции символов, проверить её и установить значение.

См. также функцию 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API