我正在测试数组元素是否大于或等于较小索引的元素。
如果我使用以下循环
,我会从主题行收到错误消息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
)
显然不是吗?
答案 0 :(得分:2)
不,因为此处...
三个点(0...(order.length - 1))
表示没有最后一个元素&#39;,所以最后一个值为order.length - 2
。
如果您尝试(0..(order.length - 1))
,则会遇到同样的错误。
可以使用s..e和s ... e literals构建范围
使用...创建的那些排除了结束值