2013-07-18 25 views
9

我想做Elisp解構 - 爲cons細胞綁定?

(destructuring-bind (start end) (bounds-of-thing-at-point 'symbol)) 

bounds-of-thing-at-point返回利弊細胞,而不是一個列表,因此 destructuring-bind不起作用。 什麼可以適用於這種情況?

+2

'(解構綁定(啓動。完)(利弊 'X' Y)(郵件 「%s%S」))'爲我工作。 Emacs是什麼版本? – 2013-07-18 10:20:28

+0

完美地工作,@ wvxvw。沒有想到使用點。但文檔字符串不是很豐富。你可以發佈答案,以便我可以接受嗎? –

回答

17

由於destructuring-bindcl包宏,它可能是值得考慮的Common Lisp文件更多的例子。

This page顯示該宏的語法。請注意0​​。儘管我不確定cl版本的destructuring-bind實際上是否支持所有不常見的情況(許多關鍵字在與Common Lisp宏/函數一起使用時纔有意義,但在Emacs Lisp中沒有這種含義)。

這樣:

(destructuring-bind (start . end) (bounds-of-thing-at-point 'symbol) ;...) 

應該工作。

2

我想不出任何東西一樣優雅的解構綁定,但是這會工作:

(let* ((b (bounds-of-thing-at-point 'symbol)) 
     (start (car b)) 
     (end (cdr b))) 
    ...) 
+0

您已將界限存儲到'b',然後嘗試從'x'訪問它們。 – Tyler

+1

已修復!感謝您指出它(無論如何,wvxvw的答案更好,因爲它具體說明了abo-abo試圖做的事情) – juanleon

3

我會使用

(pcase-let ((`(,start . ,end) (bounds-of-thing-at-point 'symbol))) 
    ...)