Để bao gồm khả năng tương thích Lisp chung, tôi đã thấy cả hai
(require 'cl)
và
(require 'cl-lib)
Cái nào đúng? Theo tôi hiểu cl-lib
là phần sau của hai người, nhưng liệu có an toàn khi sử dụng không?
Để bao gồm khả năng tương thích Lisp chung, tôi đã thấy cả hai
(require 'cl)
và
(require 'cl-lib)
Cái nào đúng? Theo tôi hiểu cl-lib
là phần sau của hai người, nhưng liệu có an toàn khi sử dụng không?
Câu trả lời:
Thứ nhất là thư viện cũ, thứ hai là thư viện mới.
Cũ một định nghĩa điều thích defstruct
, symbol-macrolet
, incf
, trong khi định nghĩa thứ hai thay cl-defstruct
, cl-symbol-macrolet
và cl-incf
.
Cái cũ không được chấp nhận vì nó không tuân theo quy tắc chung rằng các gói nên sử dụng "tiền tố gói" cho tất cả các định nghĩa của chúng để thử và tránh xung đột với các gói khác. IOW cái cũ làm rối không gian tên trong khi cái mới cẩn thận chỉ sử dụng các định danh bắt đầu bằng cl-
.
Các phiên bản cũ của Emacs chỉ đi kèm cl
nhưng bạn có thể cài đặt cl-lib
gói tương thích chuyển tiếp từ GNU ELPA, bên trong sử dụng nội bộ cũ cl
và chỉ xuất lại các định nghĩa tương tự dưới tên mới của chúng.
Các phiên bản mới của Emacs đi kèm với một thực tế cl-lib
không sử dụng cl
nội bộ và thay vào đó chúng có cl
gói tương thích ngược sử dụng nội bộ cl-lib
và chỉ tái xuất các định nghĩa tương tự dưới tên cũ của chúng.