Jar*_*ith 12 clojure conditional-statements
因此,在弱类型 C 中,0 在布尔上下文(如条件表达式)中被评估为 false,而其他所有内容都是 true。现代动态语言似乎在零是否为假的问题上存在分歧:Python、PHP 和 Javascript 说是,而 Ruby、Lua、Clojure 和 Racket 说不是。
问题是,为什么?我用谷歌搜索了我的问题标题,并在黑客新闻上找到了这个帖子,其中有有趣的内容,但没有回答我的问题。在我的搜索中用“lisp”替换 Clojure 没有产生任何历史参考。
因此,为了更准确地阐述我的问题:在条件表达式中零评估是否有实际的技术优势,或者它只是成为动态语言中的准标准(不受 C 的影响)早期的口齿不清?对于习惯 C/Python/Javascript 的程序员来说,这绝对有点奇怪。
rmu*_*unn 25
主要原因是许多 Clojure 函数希望能够轻松区分“无”和“有”。nil是没有值,但数字 0 有实际值。空列表也是真实存在的,它是一个可以(例如)编辑的序列conj。(尽管 Clojure 允许您(conj nil 1)这样做,但这可能不是最好的例子。)
但关键的区别在于 0 不是“无”,而是“有”。在 Clojure 中,只有“nothing”(和 Boolean false)才是 false。这是一种思考虚假的不同方式,当你有 Python 背景时,它可能会让人感到不舒服(就像我一样),但我实际上发现它比 Python 的虚假机制更有用。