Установка значений переменных
Обычный способ изменения значения переменной — с помощью специальной формы setq. Если вам нужно вычислить выбор переменной во время выполнения, используйте функцию set.
- Специальная форма: setq [символ форма]…
-
Эта специальная форма — наиболее распространённый метод изменения значения переменной. Каждому символу присваивается новое значение, которое является результатом вычисления соответствующей формы. Текущая привязка символа изменяется.
setqне вычисляет символ; он устанавливает символ, который вы пишете. Мы говорим, что этот аргумент автоматически цитируется. Буква ‘q’ вsetqобозначает “цитированное”.Значение
setqформы — значение последней формы.(setq x (1+ 2)) ⇒ 3x ;xnow has a global value. ⇒ 3(let ((x 5)) (setq x 6) ; The local binding ofxis set. x) ⇒ 6x ; The global value is unchanged. ⇒ 3Обратите внимание, что сначала вычисляется первая форма, затем устанавливается первый символ, затем вычисляется вторая форма, затем устанавливается второй символ и так далее:
(setq x 10 ; Notice that
xis set before y (1+ x)) ; the value ofyis computed. ⇒ 11
- Функция: set символ значение
-
Эта функция помещает значение в ячейку значения символа. Поскольку это функция, а не специальная форма, выражение, написанное для символа, вычисляется для получения символа для установки. Возвращаемое значение — значение.
Когда активна динамическая привязка переменных (по умолчанию),
setимеет тот же эффект, что иsetq, за исключением того, чтоsetвычисляет свой аргумент символ, аsetq— нет. Но когда переменная лексически связана,setвлияет на её динамическое значение, аsetqвлияет на её текущее (лексическое) значение. См. Ограничение области действия переменных.(set one 1) error→ Symbol's value as variable is void: one
(set 'one 1) ⇒ 1(set 'two 'one) ⇒ one(set two 2) ;twoevaluates to symbolone. ⇒ 2one ; So it is
onethat was set. ⇒ 2 (let ((one 1)) ; This binding ofoneis set, (set 'one 3) ; not the global value. one) ⇒ 3one ⇒ 2Если символ на самом деле не является символом, генерируется ошибка
wrong-type-argument.(set '(x y) 'z) error→ Wrong type argument: symbolp, (x y)
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/Setting-Variables.html