2016-04-03 3 views
0

Я новичок в изучении emacs lisp, и поэтому я читаю руководство emacs lisp. Когда я прочитал 6.6 Char-Tables, я смутился о том, как использовать char-table. В этой главе я не могу найти хороший пример использования char-table.Emacs lisp char-table

Конечно, elisp имеет таблицу синтаксиса, состоящую из таблицы char и таблицы синтаксиса, которая может многое делать. Я хочу знать, как хорошо использовать char-table, и в каких случаях я буду использовать его.

Благодаря

+2

Если вы считаете, что документ Emacs нуждается в улучшении, сделайте свое (конкретное) предложение разработчикам, используя «M-x report-emacs-bug». – Drew

ответ

1

Я не очень хорошо знаком с программированием Emacs Lisp, но одна из описания структуры данных, я сразу же думаю о раскладках. И, как выясняется, I was right.

В частности, использование «родительских» таблиц символов имеет смысл в этом контексте: например, при активации режима этот режим, вероятно, имеет комбинацию клавиш с привязками клавиш, которые он предоставляет. Прежде чем устанавливать текущую раскладку в ключевую карту режима, текущая раскладка клавиатуры, возможно, является родительским ключом для клавиатуры. Таким образом, когда ключевая карта режима не предоставляет сопоставления, предыдущую раскладку (ы) можно запросить для соответствующего сопоставления.


Вот как я бы реализовать углеродно таблицы в C, как грубый эскиз:

struct char_table { 
    void * data[256 /* or how many char codes there are */]; 
    struct char_table * parent; 
}; 

void * lookup(
    struct char_table * table, 
    char /* or a more suitable type for char codes */ key) { 
    void * result = table.data[key /* plus possibly some calculation */]; 
    if (!result && table.parent) { 
    result = lookup(table.parent, key); 
    } 
    return result; 
} 
+0

Я не знаю, как это означает, я программист, Мое понимание похоже на то, что таблица символов выглядит так: xxx ['a'] = object0 xxx ['b'] = object1 xxx ['c'] = object2 – huix

+0

Это довольно верно, за исключением того, что char-таблицы могут быть разреженными, т.е. неиспользуемые индексы не занимают никакого пространства (думаю, хэш/dict/ассоциативный массив/ассоциативный список Lisp). – tripleee

0

Emacs, и символьные-таблицы являются просто особый вид массива, который индексируется символов, а не по целые числа. В Unicode много символов, поэтому стоит иметь специальную реализацию такого массива, где многие диапазоны символов имеют одинаковое значение.