在使用define-key時,似乎不應該引用KEYMAP。關於define-key(以及何時引用參數的問題)引起了一些混淆
(define-key org-remember-mode-map "\C-c\C-r" 'org-remember-kill)
我很困惑,因爲我認爲,這不是引用的函數的所有參數進行評估,並根據幫助下,確定鍵是一個函數,而不是宏。我不明白爲什麼可以在調用define-key之後修改KEYMAP的值。
(defun increment-value (a)
(setq a (+ 1 a)))
(setq my-num 10)
(increment-value my-num)
my-num ; ===> 10
更新:答案解釋一切,但對於那些還在迷茫,讓我清楚了更多的例子。上述
我的增量價值的例子是相同的:
(let ((n 0))
(print n) ; prints 0
(let ((a n))
(setq a (+ 1 a))
(print a) ; prints 1
)
(print n) ; prints 0
)
什麼上面怎麼回事,我認爲,類似這樣的一些,圖示例,這是怎麼回事:
(let ((some-map '(1 2)))
(print some-map) ; prints (1 2)
(let ((a some-map))
(setq a (list 4 (second a)))
(print a) ; prints (4 2)
)
(print some-map) ; prints (1 2)
)
定義鍵中發生了什麼類似於第二個某個映射示例:
(let ((some-map '(1 2)))
(print some-map) ; prints (1 2)
(let ((a some-map))
(setcar a 4)
(print a) ; prints (4 2)
)
(print some-map) ; prints (4 2)
)
現在閱讀ans我們再次考慮到這三個例子,你會得到它。另請閱讀http://www.emacswiki.org/emacs/ListModification