`< =':String与nil的比较失败(ArgumentError)

时间:2015-03-25 19:14:31

标签: ruby iterator comparison each null

我正在测试数组元素是否大于或等于较小索引的元素。

如果我使用以下循环

,我会从主题行收到错误消息
return true if order.each_index {|i| order[i ] <= order[i+1]}

我理解我的数组的最后一个元素(顺序)无法与不存在的元素进行比较。

将值与nil进行比较是不可能的。

我不知道为什么以下循环不会返回相同的错误

(0...(order.length - 1)).all? do |i|
  order[i] <= order[i + 1]
end

似乎在某些时候,i = order.length-1 这意味着order[i+1]nil值(order.length

显然不是吗?

1 个答案:

答案 0 :(得分:2)

不,因为此处...三个点(0...(order.length - 1))表示没有最后一个元素&#39;,所以最后一个值为order.length - 2

如果您尝试(0..(order.length - 1)),则会遇到同样的错误。

检查Range documentation

  

可以使用s..e和s ... e literals构建范围

     

使用...创建的那些排除了结束值