在Clojure中,我发现这令人惊讶:
> (count nil)
0
Run Code Online (Sandbox Code Playgroud)
我希望有一个类型错误,就像在这种情况下:
> (count 77)
java.lang.UnsupportedOperationException: count not supported on this type: Long
Run Code Online (Sandbox Code Playgroud)
既然nil不是清单:
> (list? nil)
false
Run Code Online (Sandbox Code Playgroud)
是否nil具有空序列的特殊状态?
有一个旧的lisp传统来混淆nil和空列表.
现在Clojure并不遵守那个,而是在LISP差异页面中
你可以阅读
Clojure的一大不同之处在于序列.序列不是特定的集合,尤其是.它们不一定是具体的清单.当你向一个空集合询问其元素序列时(通过调用seq),它返回nil,说"我不能生成一个".当你在其最后一个元素上询问一个序列时,它返回另一个逻辑序列.您只能通过依次调用seq来判断该序列是否为空.这使序列和序列协议变得懒惰.
因此,为了能够与许多其他传统处理函数(首先,休息等)链接"seq"调用,你必须处理nil作为某种空列表(这只是我对整个事件的理解).
| 归档时间: |
|
| 查看次数: |
244 次 |
| 最近记录: |