Токенизатор простой строки на пробелах должен работать, но существует действительно много способов, которыми Вы могли сделать это.
Вот пример с помощью токенизатора:
String command = "kick person";
StringTokenizer tokens = new StringTokenizer(command);
String action = null;
if (tokens.hasMoreTokens()) {
action = tokens.nextToken();
}
if (action != null) {
doCommand(action, tokens);
}
Тогда маркеры могут далее использоваться для аргументов. Это все предполагает, что никакие пробелы не используются в аргументах..., таким образом, Вы могли бы хотеть к самокрутке простой механизм парсинга (как получение первого пробела и использование текста прежде как действие или использование регулярного выражения, если Вы не возражаете против хита скорости), просто абстрагируйте его, таким образом, это может использоваться где угодно.
Апостроф - это кавычка, которая говорит интерпретатору не анализировать следующее выражение (имя символа). Таким образом, '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
как макрос , у вас не будет этого ограничения.
somevar
|
|
v
--- --- --- --- --- --- --- ---
| | |--> | | |--> | | |--> | | |--> nil
--- --- --- --- --- --- --- ---
| | | |
| | | |
--> tulip --> rose --> violet --> buttercup
Итак, чтобы написать свою собственную функцию 'add-to-list
, вам понадобится имя переменной.
Конечно, если вы написали ' add-to-list
как макрос , у вас не будет этого ограничения.
somevar
|
|
v
--- --- --- --- --- --- --- ---
| | |--> | | |--> | | |--> | | |--> nil
--- --- --- --- --- --- --- ---
| | | |
| | | |
--> tulip --> rose --> violet --> buttercup
Итак, чтобы написать свою собственную функцию 'add-to-list
, вам понадобится имя переменной.
Конечно, если вы написали ' add-to-list
как макрос , у вас не будет этого ограничения.