- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
来自a comment on another question ,有人说 Clojure 习惯用法更喜欢返回 nil 而不是像 Scheme 中那样返回空列表。这是为什么?
喜欢,
(when (seq lat) ...)
而不是
(if (empty? lat)
'() ...)
最佳答案
我可以想到几个原因:
逻辑区别。在 Clojure 中,nil 意味着什么都没有/没有值(value)。而 '() "空列表是一个值 - 它恰好是一个空列表值。在概念和逻辑上区分这两者通常很有用。
适合 JVM - JVM 对象模型支持空引用。并且相当多的 Java API 返回 null 表示“无”或“未找到值”。因此,为了确保轻松的 JVM 互操作性,Clojure 以类似的方式使用 nil 是有意义的。
懒惰 - 这里的逻辑相当复杂,但我的理解是,使用 nil 表示“无列表”与 Clojure 的 lazy sequences 配合使用效果更好。由于 Clojure 默认是一种惰性函数式编程语言,因此这种用法成为标准是有意义的。请参阅 http://clojure.org/lazy 了解一些额外的说明。
“虚假” - 在编写检查集合的条件代码时,使用 nil 表示“无”也表示“假”,这很方便 - 因此您可以编写像 (if (some-map :some-key) ....)
这样的代码测试 HashMap 是否包含给定键的值。
性能 - 测试 nil 比检查列表是否为空更有效......因此采用这种习惯用法作为标准可以带来更高性能的惯用代码
请注意,Clojure 中仍有一些函数确实返回空列表。一个例子是休息:
(rest [1])
=> ()
这个 question on rest vs. next 详细说明了为什么会这样......
关于clojure - 为什么 Clojure 习惯用法更喜欢返回 nil 而不是像Scheme 那样返回空列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6045404/
我编写的代码主要供个人使用,但我正在考虑发布我最初开发供个人使用的应用程序(科学模拟/可视化)。 我的一个习惯是在类中使用一个main方法来单独测试类的运行情况。我认为这在某种程度上可能是不好的(毫无
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How do I convince programmers in my team to do TDD? 在从
假设我想测试是否有一个名为“Z”的驱动器。第一步是这样的; Get-PSProvider | Select-Object -Property Drives 这个给我; Drives: ... {C,
这是对 an old answer to a question about the necessity of functools.partial 的一种跟进: 虽然这个答案非常清楚地解释了这种现象及其
Perl 习惯很难改掉。两种语言之间的变量声明、作用域、全局/局部是不同的。是否有一组推荐的 python 语言习语可以使从 perl 编码到 python 编码的过渡不那么痛苦。 细微的变量拼写错误
我是一名优秀的程序员,十分优秀!