Przykład wkładki funkcji jest wykazany jako:

(with-temp-buffer
  (insert "hello" ?\s "world" ?\n)
  (buffer-string))

Co tu oznacza ??

1
Calculus 23 listopad 2020, 06:15

1 odpowiedź

Najlepsza odpowiedź

?\s i ?\n czytaj składnię dla znaków . Pierwsza jest odczytywana składnia dla znaku przestrzeni; Drugi dla postaci NEWLINE (zwany również Control J, a czasami pojawia się jako ^J, gdzie ^ j jest znakiem nowej linii.

W Emacs Lisp Postacie są dodatnimi liczbami całkowitymi. Mogą być napisane jako cyfry dla swoich kodów ASCII (wartości) i można je odczytać przez czytnik LISP, gdy zapisuje w ten sposób: 32 (dla 10) i 10 (dla 10 (dla 10 (dla 10 X3}}). Ale Elisp oferuje również składnię czytania znaków wprowadzone przez ?, a te dwa znaki mają własną składnię {X5}}. Inne, bardziej zwykłe znaki mogą być prefiksowane przez ?: ?s: ?s jest odczytywane jako znak s i ?@ jest odczytywany jako znak {{x10}}.

Składnia ? jest bardziej czytelna dla ludzi niż przy użyciu po prostu liczb całkowitych: 115 (dla ?s) i 64 dla ?@ . Ale zawsze możesz używać po prostu liczb całkowitych - znaki są liczbami całkowitymi .

Twój przykład: (insert "hello" ?\s "world" ?\n). Funkcja insert Akceptuje ciągi i znaki jako jego argumenty. W takim przypadku przekazujesz ciąg "hello", znak ?\s (kosmiczny char), ciąg "world" i znakowy ?\n (Newline Char, Control J).

Zobacz instrukcję Elisp, węzeł Basic Car Składnia .

5
phils 24 listopad 2020, 03:01