初学者数组迭代&错误代码解释

时间:2015-04-22 19:04:52

标签: ruby arrays error-handling

我一直收到以下错误。经过一些研究后,我认为这是因为我的数组访问因错误(错误地)具有NIL值而引发错误。

my_solution.rb:24:in `count_between': undefined method `>=' for nil:NilClass       
(NoMethodError) from my_solution.rb:35:in `<main>'

我是新手阅读错误代码,所以也许这就是我出错的地方。但正如错误所暗示的那样,它在线路 24 上获得了隧道视觉。但是我无法修复它,所以出于绝望,我随意将 23 上的(&lt; =)改为just(&lt;)。这解决了它。

  1. 为什么要修复它?我唯一的猜测是,最初使用(&lt; =)使它迭代“太远”,因此以某种方式返回NIL?

  2. 为什么错误代码说它是导致问题的第24行上的元素,当它实际上是第23行的元素时?我是新手,并试图减少错误代码,所以这是一个奇怪的经历。

  3. 感谢任何指导。

    # count_between is a method with three arguments:
    #   1. An array of integers
    #   2. An integer lower bound
    #   3. An integer upper bound
    #
    # It returns the number of integers in the array between the lower and upper          
    # bounds,
    # including (potentially) those bounds.
    #
    # If +array+ is empty the method should return 0
    # Your Solution Below:
    
    def count_between(list_of_integers, lower_bound, upper_bound)
    if list_of_integers.empty?
       return 0
    else
       count = 0
       index = 0
    
       ##line 23## 
       while index <= list_of_integers.length
    
       ##line24## 
           if list_of_integers[index] >= lower_bound &&    
           list_of_integers[index] <= upper_bound
    
                count += 1
                index += 1
           else
                index += 1
           end
        end 
     return count
    end
    end
    
    puts count_between([1,2,3], 0, 100)
    

1 个答案:

答案 0 :(得分:1)

<= list_of_integers.length的最后一个索引位于数组之外,因为数组的第一个索引是0而最后一个是array.length - 1

你的错误说第24行的原因是第23行工作正常 - 它只是计算index的值小于或等于数组的长度。一旦你尝试引用数组中该索引处的元素,它就会被指定为nil - 并且你无法在nil上执行>=操作。

这里可能有用的一件事就是启动irb。如果你试图引用一个超出范围的元素,你就会得到零。如果您尝试在同一个引用上执行一个操作(未在nil.methods中列出),它将抛出您看到的错误。