布尔值:t vs. nil vs 1 vs -1
Boolean values: t vs. nil vs 1 vs -1
在 Elisp 中,我遇到了用于建模布尔值的不同 API。
我的印象是 t
和 nil
分别是表示 true 和 false 的惯用方式。但是,我也看到 1
和 -1
用于模拟同一事物。
让我感到困惑的是,我遇到过如果提供 nil
就无法工作但如果使用 -1
就可以工作的 API。
有人可以帮助我了解哪种方式实际上是首选方式。如果答案是 t
和 nil
,我欢迎任何关于为什么一些开发人员将 1
和 -1
用于他们的 API 的理论...
Lisp
在 lisp(Emacs Lisp 和 Common Lisp)中,唯一的错误值是 nil
。
其他一切都是真的,包括 0, -1 &c &c.
Emacs
Emacs 使用否定参数(包括 -1)来表示 "turn off this mode"。例如,C-h f toggle-truncate-lines
With prefix argument ARG, truncate long lines if ARG is positive,
otherwise fold them.
sds 和 sepp2k 已经涵盖了主要的误解,但在回答:
why some developers use 1 and -1 for their APIs...
Emacs 次要模式使用正数和负数(或者 non-positive 数字,包括零)来表示 "enable" 和 "disable",而不是使用 t
和 nil
是参数是 可选 ,当未提供可选参数时,其值将是 nil
。因此,无法区分显式传递参数 nil
和根本不传递参数。
历史上,不传递参数(即 nil
的参数)意味着模式将 切换。
目前只有在交互式调用时才会切换模式,参数 nil
表示 "enable"。进行此更改是为了保证 启用 该模式 (add-hook 'prog-mode-hook 'some-minor-mode)
之类的东西——这将导致 some-minor-mode
被调用而不带任何参数。 =19=]
在 Elisp 中,我遇到了用于建模布尔值的不同 API。
我的印象是 t
和 nil
分别是表示 true 和 false 的惯用方式。但是,我也看到 1
和 -1
用于模拟同一事物。
让我感到困惑的是,我遇到过如果提供 nil
就无法工作但如果使用 -1
就可以工作的 API。
有人可以帮助我了解哪种方式实际上是首选方式。如果答案是 t
和 nil
,我欢迎任何关于为什么一些开发人员将 1
和 -1
用于他们的 API 的理论...
Lisp
在 lisp(Emacs Lisp 和 Common Lisp)中,唯一的错误值是 nil
。
其他一切都是真的,包括 0, -1 &c &c.
Emacs
Emacs 使用否定参数(包括 -1)来表示 "turn off this mode"。例如,C-h f toggle-truncate-lines
With prefix argument ARG, truncate long lines if ARG is positive, otherwise fold them.
sds 和 sepp2k 已经涵盖了主要的误解,但在回答:
why some developers use 1 and -1 for their APIs...
Emacs 次要模式使用正数和负数(或者 non-positive 数字,包括零)来表示 "enable" 和 "disable",而不是使用 t
和 nil
是参数是 可选 ,当未提供可选参数时,其值将是 nil
。因此,无法区分显式传递参数 nil
和根本不传递参数。
历史上,不传递参数(即 nil
的参数)意味着模式将 切换。
目前只有在交互式调用时才会切换模式,参数 nil
表示 "enable"。进行此更改是为了保证 启用 该模式 (add-hook 'prog-mode-hook 'some-minor-mode)
之类的东西——这将导致 some-minor-mode
被调用而不带任何参数。 =19=]