clojure - 为什么 Clojure 中的零不是假的?

标签 clojure conditional-statements

因此,在弱类型 C 中,0 在 bool 上下文(如条件表达式)中被评估为假,其他一切都是真。现代动态语言似乎在零是否为假上存在分歧:Python、PHP 和 Javascript 说是,而 Ruby、Lua、Clojure 和 Racket 说不。
问题是,为什么?我在 google 上搜索了我的问题标题,并在黑客新闻上找到了 this 线程,其中包含有趣的内容,但没有回答我的问题。在我的搜索中用 'lisp' 代替 Clojure 没有产生任何历史引用。
因此,更准确地表述我的问题:在条件表达式中将零评估为真是否有实际的技术优势,或者它是否只是成为动态语言(不受 C 的影响)的准标准早期的口齿不清?对于习惯了 C/Python/Javascript 的程序员来说,这绝对有点奇怪。

最佳答案

主要原因是因为许多 Clo​​jure 函数都希望能够轻松地将“无”与“某物”区分开来。 nil 是没有值,但数字 0 有实值。空列表也是真实存在的,它是一个可以(例如)被 conj 编辑的序列。 (尽管由于 Clojure 允许您使用 (conj nil 1),这可能不是最好的例子。)

但关键的区别在于 0 不是“无”,而是“有”。只有“nothing”(和 bool 值 false )在 Clojure 中会是假的。这是一种不同的思考虚假的方式,当您来自 Python 背景时,它可能会令人不快(就像我一样),但实际上我发现它比 Python 的虚假机制更有用。

关于clojure - 为什么 Clojure 中的零不是假的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32761502/

相关文章:

oop - 如何在函数式编程中使用多态性?

java - 如何在Java的构造函数中为变量设置条件值?

c# - 在 C# 中组合多个条件表达式

clojure - 如何正确使用线程宏?

java - 正则表达式:匹配所有连字符,并用空格替换仅包含字母且不在引号内的单词

python - 如何在 Python 中使用 IF ALL 语句

xslt - XSL 中的 switch case

css - 有条件的 CSS3...如果这就是所谓的

Clojure 程序读取自己的 MANIFEST.MF

clojure - 何时在 Clojure 中使用 core.async?