因此,在弱类型 C 中,0 在 bool 上下文(如条件表达式)中被评估为假,其他一切都是真。现代动态语言似乎在零是否为假上存在分歧:Python、PHP 和 Javascript 说是,而 Ruby、Lua、Clojure 和 Racket 说不。
问题是,为什么?我在 google 上搜索了我的问题标题,并在黑客新闻上找到了 this 线程,其中包含有趣的内容,但没有回答我的问题。在我的搜索中用 'lisp' 代替 Clojure 没有产生任何历史引用。
因此,更准确地表述我的问题:在条件表达式中将零评估为真是否有实际的技术优势,或者它是否只是成为动态语言(不受 C 的影响)的准标准早期的口齿不清?对于习惯了 C/Python/Javascript 的程序员来说,这绝对有点奇怪。
最佳答案
主要原因是因为许多 Clojure 函数都希望能够轻松地将“无”与“某物”区分开来。 nil
是没有值,但数字 0 有实值。空列表也是真实存在的,它是一个可以(例如)被 conj
编辑的序列。 (尽管由于 Clojure 允许您使用 (conj nil 1)
,这可能不是最好的例子。)
但关键的区别在于 0 不是“无”,而是“有”。只有“nothing”(和 bool 值 false
)在 Clojure 中会是假的。这是一种不同的思考虚假的方式,当您来自 Python 背景时,它可能会令人不快(就像我一样),但实际上我发现它比 Python 的虚假机制更有用。
关于clojure - 为什么 Clojure 中的零不是假的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32761502/