隨着封裝大小的增長,代碼的可讀性下降。最好的做法是根據其功能將軟件包分成不同的文件。有時,這些文件需要彼此的變量和功能。相互依賴.el文件的設計模式
實施例:
foo.el
(defvar foo-data-path "~/foo/data/")
(foo-log-write 'somedata)
FOO-log.el從foo-log-write
(defvar foo-logfile (concat foo-data-path "foo.log"))
(defun foo-log-write (data)
;; Write to log file
)
作爲foo.el
使用功能,我在foo.el
放(require 'foo-log)
。
在foo-log.el
,它使用foo-data-path
從foo.el
,我也應該把(require 'foo)
在裏面嗎? 如果我不添加(require 'foo)
,則語法檢查程序始終會投訴reference to free variable
。
不需要分解一個或兩個需要什麼,並且不需要其他任何東西,並且需要將其作爲第三個庫。或者重構這2個,這樣只有其中一個定義了兩者需要什麼,另一個需要提供那些需要的定義。你不能讓每一個都需要另一個。如果你嘗試,然後加載一將嘗試加載另一個將嘗試加載第一個將嘗試加載第二個... – Drew
我認爲'需要'應該是安全的多次調用。正如在[GNU Emacs Lisp](https://www.gnu。org/software/emacs/manual/html_node/elisp/Named-Features.html),此功能使用'(featurep feature)'檢查當前Emacs會話中是否存在功能。參數特徵必須是符號。 如果該功能不存在,則需要加載具有加載的文件名。 – tom