2010-05-25 27 views

Trả lời

8

documentation in the Emacs lisp manual có một số trường hợp mẫu có vẻ như trả lời câu hỏi của bạn (trái ngược với chuỗi tài liệu).

Từ khi xem mã nguồn Emacs, eval-and-compile được sử dụng để làm yên lặng trình biên dịch, để tạo macro/chức năng trong quá trình biên dịch (và đánh giá) hoặc tạo biến thể/phiên bản cụ thể của macro/chức năng trong quá trình biên dịch.

Một cách sử dụng tôi thấy hữu ích khi xem là trong ezimage.el. Trong đó, một câu lệnh if được đặt bên trong các số eval-and-compile thành các macro xác định có điều kiện tùy thuộc vào việc gói được biên dịch/đánh giá trong Emacs hoặc XEmacs hay không, và bổ sung liệu có một tính năng cụ thể không. Bằng cách gói rằng có điều kiện bên trong eval-and-compile, bạn cho phép sử dụng macro thích hợp trong quá trình biên dịch. Tình huống tương tự có thể được tìm thấy trong mwheel.el.

Tương tự, nếu bạn muốn xác định hàm qua fset và có sẵn trong quá trình biên dịch, bạn cần có cuộc gọi đến fset được bao bọc với eval-and-compile vì nếu không biểu tượng -> liên kết hàm không khả dụng cho đến khi tệp được đánh giá (vì việc biên soạn cuộc gọi đến fset chỉ cần tối ưu hóa bài tập, nó không thực sự là làm bài tập). Tại sao bạn muốn phân công này trong quá trình biên dịch? Để làm yên lặng trình biên dịch. Lưu ý: đây chỉ là từ ngữ của tôi về những gì có trong tài liệu elisp.

Tôi đã nhận thấy rất nhiều công dụng trong mã Emacs chỉ gói các cuộc gọi đến require, có vẻ dư thừa khi bạn đọc tài liệu. Tôi đang thua lỗ như thế nào để giải thích chúng.

Các vấn đề liên quan