2013-01-13 81 views
2

我通過An Introduction to Programming in Emacs Lisp讀,我看到以下內容:如何知道何時使用括號

此代碼:

(message "The name of this buffer is: %s." (buffer-name)) 

,而這一個失敗:

(message "The name of this buffer is: %s." buffer-name) 

然而,此代碼的工作原理:

(message "The value of fill-column is %d." fill-column) 

雖然這一次失敗:

(message "The value of fill-column is %d." (fill-column)) 

我的問題是爲什麼? buffer-namefill-column有什麼不同?我如何知道何時使用括號?

回答

5

簡單地說 - buffer-name是一個函數(返回一個字符串),而fill-column是一個變量(計算爲一個整數)。

所有Lisp方言中的函數調用應該用圓括號包圍。

要查看有關Emacs功能的詳細信息,請按C-h f功能名稱RET。 要查看有關Emacs中變量的詳細信息,請按C-h v變量名稱RET

+0

謝謝。這很有道理。有沒有一種方法可以交互地知道給定的符號是函數,變量還是其他的? (即使用'C-x C-e'或任何等效命令) –

+1

我建議在交互式shell中使用'M-x ielm'來試驗Emacs Lisp。 –

+2

user273158:請注意,elisp符號同時具有一個值槽和一個功能槽,這意味着給定的符號可以(可能)用作變量和函數。交互式地,'C-h v'顯示幫助變量和'C-h f'幫助一個函數。非交互式地,函數'boundp'和'fboundp'告訴你是否填充給定符號的值和函數時隙。 – phils