布尔值:t vs. nil vs 1 vs -1

wpc*_*rro 4 lisp elisp

在Elisp中,我遇到了用于建模布尔值的不同API.

我的印象是t,nil分别代表真假的惯用方式.但是,我也看到1-1习惯了同样的事情.

让我感到困惑的是,我遇到了API,如果nil提供的话将不起作用,但如果-1使用则会起作用.

有人可以帮助我理解哪个实际上是首选方式.如果答案是tnil,我欢迎任何理论为什么一些开发人员使用1-1他们的API ......

sds*_*sds 9

口齿不清

在lisp(Emacs Lisp和Common Lisp)中,唯一的错误值是nil.其他一切都是真的,包括0,-1和c&c.

Emacs的

Emacs使用负参数(包括-1)来表示"关闭此模式".例如,C-h f toggle-truncate-lines

使用前缀参数ARG,如果ARG为正,则截断长行,否则折叠它们.


phi*_*ils 5

sds和sepp2k涵盖了主要的误解,但针对以下问题:

为什么某些开发人员将1和-1用于其API ...

Emacs次要模式使用正数和负数(或者说是非正数,包括零)来表示“启用”和“禁用”而不是使用tand的原因nil是该参数是可选的,而当可选参数是如果未提供,则其值为nil。因此,不可能在传递nil显式参数和根本不传递参数之间进行区分。

从历史上看,不传递任何参数(即的参数nil)意味着该模式将被切换

如今,仅在以交互方式调用模式时才切换模式,并且参数的nil意思是“启用”。进行此更改是为了确保像这样(add-hook 'prog-mode-hook 'some-minor-mode)-将导致some-minor-mode不带任何参数的调用- 启用该模式。