Khi nào nên sử dụng thuộc tính ký hiệu?


7

Giả sử tôi cần liên kết các biểu tượng với các thư mục và điều này sẽ chỉ cần được thực hiện cho một số lượng nhỏ các boundpbiểu tượng.

Theo cách tôi thấy, có hai cách dễ dàng để làm điều đó:

  1. Lưu trữ liên kết này trong một biến riêng biệt (alist hoặc bản đồ băm). Bằng cách này, thư mục của mỗi biểu tượng sẽ có thể truy cập được (cdr (assq SYMBOL my-alist)).
  2. Lưu trữ này trong một tài sản biểu tượng. Bằng cách này, nó sẽ có thể truy cập được với (get SYMBOL 'my-directory).

Cái nào trong số này sẽ là cách thành ngữ để theo dõi thông tin này?


Sẽ rất đáng để cho biết liệu bạn có biết chắc chắn rằng không có trường hợp sử dụng cho bất kỳ ai muốn tự động ràng buộc các giá trị trong phạm vi tạm thời hay không (vì điều đó sẽ loại trừ khá nhiều tùy chọn 2).
phils 30/1/2015

@phils điểm tốt. Theo thiết kế, nó không có nghĩa là bị ràng buộc, nhưng tôi nghĩ đó là một mối quan tâm hợp lệ. Bạn không bao giờ biết những trường hợp sử dụng mà người khác có thể tìm thấy cho các chức năng của bạn.
Malabarba

@phils: Ý bạn là gì? Chỉ có các đạo cụ biểu tượng, không phải các giá trị biểu tượng, được đặt câu hỏi ở đây, phải không? (defvar s 5) (put 's 'd "c:/abc/") (let ((s 4)) (message "d: %s, val: %S" (get 's 'd) s)). Và OP: tại sao bạn nói về "chức năng" chứ không phải biểu tượng? Chắc chắn là tôi đang thiếu gì đó.
vẽ

@Drew anh có nghĩa là để ràng buộc thư mục liên kết với một biểu tượng. Không thể nếu bạn sử dụng các thuộc tính ký hiệu, nhưng điều đó là có thể nếu bạn lưu trữ thông tin này trong một biến như là một alist (bạn chỉ cần liên kết với alist). Đối với câu hỏi thứ hai của bạn, tôi đã nói "các chức năng" bởi vì tất cả các hành vi này sẽ được bao bọc bởi các chức năng tất nhiên. Tôi không nghĩ rằng tôi đã từng thấy một gói không có chức năng. :-)
Malabarba

Nếu hai bạn hiểu nhau thì không cần phải giải thích, nhưng FWIW tôi vẫn không hiểu. Bằng cách "ràng buộc một thư mục" Tôi giả sử bạn có nghĩa là ràng buộc một biến với một chuỗi thư mục. Chắc chắn giá trị của thuộc tính ký hiệu là ký hiệu, có giá trị ký hiệu giữ chuỗi dir. let-biết rằng biểu tượng chuỗi dir (được sử dụng làm giá trị prop) không phải là một vấn đề. (Hãy bỏ qua nếu không thích hợp.)
vẽ

Câu trả lời:


7

Nó thực sự phụ thuộc vào các trường hợp sử dụng.

Nói chung, thuộc tính biểu tượng là các tính năng "cấp thấp" / "nội bộ" và người ta không nên sử dụng chúng cho các công cụ "cấp độ người dùng". Tuy nhiên, có một nơi cho tất cả mọi thứ :-)

Một vài điểm bạn có thể muốn xem xét là:

  1. Tốc độ: thuộc tính ký hiệu là nhanh nhất, theo sát các bảng băm; alist là chậm .
  2. Việc thiết lập lại hệ thống của bạn sẽ dễ dàng hơn (nghĩa là xóa tất cả các dấu tích của gói của bạn) bằng bảng alist / hash (đặt lại biến thành nil) so với các thuộc tính ký hiệu (lặp qua obarrayvà loại bỏ tất cả các thuộc tính có liên quan khỏi tất cả các ký hiệu).
  3. Thật dễ dàng để tự động tạo bóng cho cài đặt bằng cách sử dụng alist; khó hơn nhiều với bảng băm và thuộc tính ký hiệu.

Một lựa chọn khác bạn có thể muốn xem xét là .dir-locals.el.


Câu trả lời tốt. Dunno về # 2, tuy nhiên. Bạn có ý nghĩa gì khi "thiết lập lại hệ thống của bạn"? Bạn đang nói về những khó khăn tương đối của việc xóa một tài sản khỏi một biểu tượng (so với, ví dụ, một khóa từ một alist)?
vẽ

@Drew: Tôi đã làm rõ quan điểm của mình. Bây giờ thì tốt hơn chưa?
sds

Vâng, hoàn toàn rõ ràng bây giờ. Tôi tự hỏi nếu bạn có lẽ không có nghĩa là.
vẽ

0

Miễn là bạn sử dụng tên chính tắc cho thư mục, hàm băm hoặc hàm alist là chức năng. Nếu bạn muốn người dùng sửa đổi hoặc kiểm tra dữ liệu, hãy sử dụng một alist. Nếu không, một hashtable hoạt động tốt nhất và sẽ mở rộng tốt hơn nhiều.

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.