需要禁止数组中的负数索引值

4

我有一个数组date_array。如果i0,我希望date_array[i-1]返回nil或异常。我认为我可以派生一个子类来实现这个,但我不确定接下来该怎么做。有什么想法吗?

3个回答

5
你可以这样做,但是你不应该这么做。我认为你的方法有误,因为检查传递的索引值是你的责任,而不是数组本身的责任。
仅仅是一个例子。
def get_array_value (i)
  return data_array[i - 1] unless i < 0
  return nil
end

然而,如果你坚持的话,这个解决方案可能适合你。
# arr = SpecialArray.new([1, 2, 3, 4, 5])

class SpecialArray < Array

  def [](i)
    return super(i) unless i < 0
    return nil
  end  

end

是的,将直接通过[]调用数组的方式更改为使用函数(如您上面的函数)同样有效。谢谢。 - davej

0

嗯,我同意Adam的观点,最好控制索引而不是这样做:

class Ary < Array
    def [](i)
        return nil if i < 0
        super
    end
end

a = Ary.new([1, 2, 3])
b = Array.new([1, 2, 3])

#try access with -1 (normally would show last)
p a[-1] #=> nil
p b[-1] #=> 3

0

我认为你可能在做事情时有些不正确。话虽如此:

你可以使用哈希表而不是数组。哈希表不会重新解释 hash[-1] 为其他含义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接