emacs / elisp: Biểu tượng băm (bảng Anh, ký hiệu số, octothorp) được sử dụng để làm gì?


102

Điều này làm gì?

(add-hook 'compilation-mode-hook #'my-setup-compile-mode)

... và nó khác với

(add-hook 'compilation-mode-hook 'my-setup-compile-mode)

Câu trả lời:


98

Không có sự khác biệt:

(eq 'my-add #'my-add)

hoa lợi t

#thể được sử dụng ở phía trước của một lambdabiểu thức cho biết trình biên dịch byte rằng biểu thức sau có thể được biên dịch theo byte, hãy xem tài liệu về Hàm ẩn danh . Nhưng không có gì để biên dịch trong trường hợp của một biểu tượng.

Nói chung, nó được sử dụng trong biểu diễn in cùng với dấu ngoặc nhọn bên trái (<) để chỉ ra rằng đối tượng được in ra là một mô tả (nhưng không thể đọc được). Ví dụ:

#<buffer foo.txt>

Nó cũng được người đọc sử dụng trong các cấu trúc để biểu diễn các cấu trúc hình tròn. Xem tài liệu về Cú pháp Đọc cho Đối tượng Hình tròn .

Và sau đó bạn có công dụng của nó để biểu thị cơ số cho số nguyên , ví dụ #x2c -> 44.

Thêm nữa, tôi chắc chắn.


12
Theo bài báo này , một lý do chính đáng để áp dụng #cho một biểu tượng đơn lẻ là nhận được chẩn đoán tại thời điểm biên dịch nếu biểu tượng đó không được xác định.
ajk

3
Không hoàn toàn đúng khi "không có gì để biên dịch trong trường hợp của một biểu tượng." Trình biên dịch byte diễn giải # 'car có nghĩa là "Tôi luôn đề cập đến hàm` foo', không phải biểu tượng foo. " Sau đó, nó thực sự có thể nội dòng định nghĩa của foo trong đầu ra được biên dịch theo byte. (Chỉnh sửa: nope, điều đó thực sự sai. Ký hiệu # 'sẽ không được biên dịch theo byte khác với ký hiệu' - nó chỉ là một dấu hiệu của ý định.)
Jonathan Tomer

11
Có lẽ vẫn đề cập đến 'symbolđại diện (quote symbol)#'symbolđại diện (function symbol)về mặt cú pháp.
tripleee

27

Bạn có thể tìm thấy danh sách toàn diện ở đầu chỉ mục tham chiếu lisp Emacs .

Chỉnh sửa : Hoặc thậm chí thuận tiện hơn, từ chính Emacs:

  • M-x info RET (mở trình duyệt thông tin)

  • d m elisp RET (mở hướng dẫn sử dụng elisp)

  • I # RET(liệt kê các mục #trong chỉ mục)


25

Tôi đã tìm thấy câu hỏi này trong khi tìm kiếm ý nghĩa của hàm băm trong thứ gì đó tôi tìm thấy khi hack mode-line-format:

#("-%-" 0 3
  (help-echo "Display as tooltip when mouse hovers or with display-local-help."))

là một định dạng được sử dụng cho các thuộc tính văn bản trong chuỗi trong đó:

  • "-%-", văn bản cần được điều chỉnh phù hợp: một dấu gạch ngang và % -construct dẫn đến "dấu gạch ngang đủ để lấp đầy phần còn lại của dòng chế độ", dẫn đến Emacs nổi tiếng ------.
  • 0, ký tự đầu tiên áp dụng các thuộc tính văn bản.
  • 3, ký tự cuối cùng mà các thuộc tính văn bản áp dụng, tức là toàn bộ "-%-".
  • (help-echo "..."), một thuộc tính và một chuỗi làm đối số của nó.

Điều này có thể được tạo bằng propertizehàm :

(propertize "Hover over me!" 'help-echo '"congratulations!")

(insert (thích hợp hóa "Di chuột qua tôi!" 'help-echo' "Xin chúc mừng!"))

sẽ giống như #("Hover over me!" 0 14 (help-echo "Congratulations!")):

Ví dụ nhỏ.

Nếu bạn đang sử dụng chế độ khóa phông chữ, việc sử dụng buffer-substringlệnh có thể tạo ra một cái gì đó như sau:

(buffer-substring 1 28) ; First 27 characters in the current buffer
  #(";; This buffer is for notes"
     0 3
     (fontified t face font-lock-comment-delimiter-face)
     3 27
     (fontified t face font-lock-comment-face))

Vì vậy, bạn có thể tạo một cái gì đó như:

Hiển thị chức năng thích hợp hóa tương ứng cho nhiều thuộc tính.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.