2016-04-03 14 views
0

Ich bin ein Neuling in Bezug auf das Lernen Emacs Lisp und ich lese daher die Emacs Lisp Handbuch. Als ich 6.6 Char-Tables las, war ich verwirrt, wie man die Char-Tabelle benutzt. In diesem Kapitel kann ich kein gutes Beispiel für die Verwendung von char-table finden.Emacs Lisp Char-Tabelle

Natürlich hat elisp die Syntax-Tabelle, die aus der Char-Tabelle und Syntax-Tabelle besteht, kann eine Menge Dinge tun. Ich möchte wissen, wie man char-table gut nutzt und in welchen Fällen ich es verwenden würde.

Dank

+2

Wenn Sie denken, dass das Emacs-Dokument verbessert werden muss, machen Sie bitte Ihren (konkreten) Vorschlag an die Entwickler, indem Sie 'M-x report-emacs-bug' verwenden. – Drew

Antwort

1

Ich bin mit Emacs Lisp-Programmierung nicht sehr vertraut, sondern allein aus der Beschreibung der Datenstruktur ich sofort von keymaps dachte. Und wie sich herausstellt, I was right.

Vor allem die Verwendung von "parent" Char-Tabellen macht in diesem Zusammenhang Sinn: Zum Beispiel, wenn ein Modus aktiviert wird, hat dieser Modus wahrscheinlich eine Tastenbelegung mit den Tastenbelegungen. Bevor die aktuelle Tastenbelegung auf die Tastenbelegung des Modus eingestellt wird, wird die aktuelle Tastenbelegung wahrscheinlich als übergeordnetes Tastenfeld des Modus verwendet. Wenn die Tastaturbelegung des Modus keine Zuordnung bereitstellt, können die vorherigen Tastaturbelegung (en) für eine entsprechende Zuordnung abgefragt werden.


Hier ist, wie ich char-Tabellen in C implementieren würde, als eine grobe Skizze:

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

Ich weiß nicht, wie es ist, ich bin ein AC-Programmierer, mein Verständnis ist so, Zeichentabelle ist wie folgt: xxx ['a'] = objekt0 xxx ['b'] = objekt1 xxx ['c'] = object2 – huix

+0

Das ist ziemlich korrekt, außer Char-Tabellen können spärlich sein, dh unbenutzte Indizes belegen keinen Platz (denken Sie an hash/dict/assoziatives Array/Lisp assoc-list). – tripleee

0

Emacs char-Tabellen sind einfach eine besondere Art von Array, das von Zeichen indiziert ist und nicht von ganze Zahlen. Es gibt viele Zeichen in Unicode, daher lohnt es sich, eine spezielle Implementierung eines solchen Arrays zu verwenden, in der viele Zeichenbereiche denselben Wert haben.