Различие между символом и именем переменной в шепелявости emacs

Токенизатор простой строки на пробелах должен работать, но существует действительно много способов, которыми Вы могли сделать это.

Вот пример с помощью токенизатора:

String command = "kick person";
StringTokenizer tokens = new StringTokenizer(command);
String action = null;

if (tokens.hasMoreTokens()) {
    action = tokens.nextToken();
}

if (action != null) {
    doCommand(action, tokens);
}

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

10
задан ire_and_curses 23 November 2009 в 04:32
поделиться

1 ответ

Апостроф - это кавычка, которая говорит интерпретатору не анализировать следующее выражение (имя символа). Таким образом, 'add-to-list получает символ, который содержит значение списка, которое предназначено для оценки.

Чтобы узнать больше о символах, прочтите документацию Symbol (в частности, Symbol Components символы имеют имена, значения, определения функций и списки свойств).

Не читая документацию , вот как я это объясняю: стратегия оценки Emacs lisp заключается в передаче по значению (а не по имени, ссылке или чему-то еще). Если бы цитаты не было, то flymake-allowed-file-name-masks оценивался бы как значение, и add-to-list должен был бы работать непосредственно со списком. Это сработает, за следующими исключениями. Если бы список был пуст, не было бы возможности изменить то, на что указывала исходная переменная. По той же причине вы не сможете добавлять элементы в начало списка.

Чтобы эти два случая работали, вам действительно нужно имя переменной, чтобы вы могли изменить то, что оно указывает to.

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

] Если вы знакомы с диаграммами блоков , возможно, это поможет.

Представьте, что some-var указывает на список:

somevar
  |
  |
  v
 --- ---      --- ---      --- ---        
|   |   |--> |   |   |--> |   |   |--> nil
 --- ---      --- ---      --- ---        
  |            |            |             
  |            |            |             
   --> rose     --> violet   --> buttercup

И вы хотели что-то добавить в начале этого списка.

Если все, с чем вам нужно работать, это значение указателя в somevar , то лучшее, что вы можете сделать, - это поместить новый элемент в начало списка, но вы не можете изменить то, на что указывает somevar (поскольку у вас нет somevar , у вас есть его значение ). Примерно так:

             somevar
               |
               |
               v
 --- ---      --- ---      --- ---      --- ---        
|   |   |--> |   |   |--> |   |   |--> |   |   |--> nil
 --- ---      --- ---      --- ---      --- ---        
  |            |            |            |             
  |            |            |            |             
   --> tulip     --> rose     --> violet   --> buttercup

Итак, чтобы написать свою собственную функцию 'add-to-list , вам понадобится имя переменной.

Конечно, если вы написали ' add-to-list как макрос , у вас не будет этого ограничения.

s значение ). Примерно так:

             somevar
               |
               |
               v
 --- ---      --- ---      --- ---      --- ---        
|   |   |--> |   |   |--> |   |   |--> |   |   |--> nil
 --- ---      --- ---      --- ---      --- ---        
  |            |            |            |             
  |            |            |            |             
   --> tulip     --> rose     --> violet   --> buttercup

Итак, чтобы написать свою собственную функцию 'add-to-list , вам понадобится имя переменной.

Конечно, если вы написали ' add-to-list как макрос , у вас не будет этого ограничения.

s значение ). Примерно так:

             somevar
               |
               |
               v
 --- ---      --- ---      --- ---      --- ---        
|   |   |--> |   |   |--> |   |   |--> |   |   |--> nil
 --- ---      --- ---      --- ---      --- ---        
  |            |            |            |             
  |            |            |            |             
   --> tulip     --> rose     --> violet   --> buttercup

Итак, чтобы написать свою собственную функцию 'add-to-list , вам понадобится имя переменной.

Конечно, если вы написали ' add-to-list как макрос , у вас не будет этого ограничения.

24
ответ дан 3 December 2019 в 16:53
поделиться
Другие вопросы по тегам:

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