Копирование/перемещение папок, где папка назначения уже существует

То же самое происходит и в Emacs Lisp. Он имеет два пространства имен, одно для функций и одно для переменных. Если вы разыменовываете символ в контексте функции ((var)), он вызовет функцию, если вы разыменовываете его в контексте переменной (var, то есть без скобок ), он даст вам переменную. Например:

(defun myvar (myvar)
  "adds 3 to MYVAR"
  (+ 3 myvar))
(setq myvar 7)
(message (myvar myvar))

Выполнит функцию myvarс аргументом 7, который является разыменованием переменной myvar.

Это может стать очень запутанным, если вы к этому не привыкли.

Посмотрев на ваш вопрос и проведя тесты для bash , я удивлен, что он демонстрирует такое же поведение. Перевод ELisp сверху на bash:

[grochmal@phoenix ~]$ myvar () { echo $(($1+3)); }
[grochmal@phoenix ~]$ myvar=7
[grochmal@phoenix ~]$ myvar $myvar
10

Bash немного менее запутан в этом, чем ELisp, потому что вам нужен $, чтобы пометить переменную. Тем не менее, это может выглядеть как declareодного имени, состоящего из двух вещей. См.:

[grochmal@phoenix ~]$ declare -p myvar
declare -x myvar="7"
[grochmal@phoenix ~]$ declare -f myvar
myvar () 
{ 
    echo $(($1+3))
}

(П.С. Как только вы привыкнете к существованию двух пространств имен, например. вы программируете на ELisp какое-то время, это перестает сбивать с толку)

1
03.11.2019, 12:59
0 ответов

Теги

Похожие вопросы