在Elisp中,我遇到了用于建模布尔值的不同API.
我的印象是t,nil分别代表真假的惯用方式.但是,我也看到1并-1习惯了同样的事情.
让我感到困惑的是,我遇到了API,如果nil提供的话将不起作用,但如果-1使用则会起作用.
有人可以帮助我理解哪个实际上是首选方式.如果答案是t和nil,我欢迎任何理论为什么一些开发人员使用1和-1他们的API ......
在lisp(Emacs Lisp和Common Lisp)中,唯一的错误值是nil.其他一切都是真的,包括0,-1和c&c.
Emacs使用负参数(包括-1)来表示"关闭此模式".例如,C-h f toggle-truncate-lines
使用前缀参数ARG,如果ARG为正,则截断长行,否则折叠它们.
sds和sepp2k涵盖了主要的误解,但针对以下问题:
为什么某些开发人员将1和-1用于其API ...
Emacs次要模式使用正数和负数(或者说是非正数,包括零)来表示“启用”和“禁用”而不是使用tand的原因nil是该参数是可选的,而当可选参数是如果未提供,则其值为nil。因此,不可能在传递nil显式参数和根本不传递参数之间进行区分。
从历史上看,不传递任何参数(即的参数nil)意味着该模式将被切换。
如今,仅在以交互方式调用模式时才切换模式,并且参数的nil意思是“启用”。进行此更改是为了确保像这样(add-hook 'prog-mode-hook 'some-minor-mode)-将导致some-minor-mode不带任何参数的调用- 启用该模式。