2016-03-29 2 views
1

У меня есть двоякий вопрос и надеюсь получить совет от экспертов здесь.Создание plist с backticks терпит неудачу в выражении

1) В синтаксическом анализе некоторого кода мне нужно сохранить найденные компоненты для последующего использования. Теперь я считаю, что хранить их как список свойств (изолированный, а не один из строки, содержащей код, так как это мне кажется довольно жестоким, хотя было бы удобно). Это против всех конвенций или разумного способа справиться с этой ситуацией?

2) Я не могу создать список свойств в операторе (let ...).

Это работает:

(setq x "BAR") 
(setq pl `(bar ,x)) 
(setq pl (plist-put pl 'foo "FOO")) 
(plist-get pl 'foo) ; returns "FOO" 

Но это не делает:

(let (pl `(bar ,x)) 
    (setq pl (plist-put pl 'foo "FOO")) 
    (plist-get pl 'foo)) 

Emacs жалуется функции аннулируются бар. Очевидно, он пытается оценить (bar ...), несмотря на обратную сторону. Зачем?

ответ

2

Отсутствие круглых скобок. Разложим специальный одиночной обратной кавычки обозначения:

(let (pl (\` (bar (\, x)))) 
    (setq pl (plist-put pl 'foo "FOO")) 
    (plist-get pl 'foo)) 

Объявляет переменную pl (без начального значения, и, следовательно, инициализируется nil), а также переменную с именем `(правильно: его название«кавычка») инициализирован до значения (bar (\, x)).

Итак, вы хотите, чтобы написать следующее вместо:

(let ((pl `(bar ,x))) 
    ...) 
Смежные вопросы