nil:NilClass 错误的未定义方法“<”但不存在 nil?

undefined method `<' for nil:NilClass error but no nil exists?

想知道为什么我在编译时收到错误:“undefined method `<' for nil:NilClass”。在查找原因后,我发现您不能在值为 nil 的对象上使用 []。这是有道理的,但我不明白为什么我的数组中会包含 nil 。我错过了什么?

   def binary_search(n, arr)
  middle = arr.length #pick middle value
  i = 0
  j = arr.length - 1

  while i <= j
    if arr[middle] == n
      return true
    elsif arr[middle] < n
      i = middle + 1
      middle = (i + j) / 2
    else
      j = middle - 1
      middle = (i + j) / 2
    end
  end
  false
end

nums = [76,32,50,90,10,8,15,49]
nums.sort
puts nums.inspect
binary_search(50, nums)

让我们看一下代码的简化子集:

arr = [76,32,50,90,10,8,15,49]
middle = arr.length # 8
arr[middle] < 50 # NoMethodError
  • length是8.
  • arr[8]nil,因为索引 8 处没有项目。请记住 Ruby 索引以 0 开头。
  • nil < 50 是一个 NoMethodError