2012-03-14 25 views

Trả lời

12

Trong Lisp, các ´ -symbol sẽ báo giá phần còn lại của biểu thức. Điều này có nghĩa là giá trị sẽ là biểu thức chính xác như được viết, các cuộc gọi hàm không được đánh giá, các biến không được thay thế bằng giá trị của nó, v.v.

Cách thẳng nhất là sử dụng hàm list tạo danh sách của các yếu tố, sau khi đánh giá đó là lập luận, ví dụ:

(completing-read "input: " (list "1" "2" my-defvar)) 

Tất nhiên, bạn cũng có thể sử dụng backquote cú pháp, như đề xuất trong câu trả lời khác. Điều này cho phép bạn trích dẫn một biểu thức phức tạp nhưng unquote (tức là đánh giá) các phần của nó. Tuy nhiên, trong trường hợp đơn giản này, tôi không nghĩ đó là công cụ thích hợp cho công việc.

+0

Cảm ơn. Nó hoạt động. – coordinate

6

my-defvar không được đánh giá là biến, nó được hiểu là biểu tượng.

Xem Emacs Lisp: evaluate variable in alist.

Vì vậy:

(defvar my-defvar "test") 
(completing-read "input: " `("1" "2" ,my-defvar)) 

nên làm việc.

Cập nhật: Một giải pháp thích hợp hơn được đưa ra trong @ Lindydancer's answer, nhưng tôi để ở đây để tham khảo.

+1

Nó không được đánh giá dưới dạng * chuỗi ký tự * (vì dấu ngoặc kép không được sử dụng), thay vào đó nó được hiểu là biểu tượng *. – Lindydancer

+0

Tôi đã sửa lỗi này, mặc dù tôi nghĩ câu trả lời của bạn phù hợp hơn. – MGwynne

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