我有一个数组date_array
。如果i
为0
,我希望date_array[i-1]
返回nil
或例外。我以为我可以为此派生一个Array的子类,但我不确定在那之后去哪里。有什么想法吗?
答案 0 :(得分:3)
你可以这样做,但你不应该这样做。你觉得,这是错误的,因为责任是你的,而不是数组,检查传递的索引值。
仅仅是一个例子
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
答案 1 :(得分: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
答案 2 :(得分:0)
我认为你可能做错了事。话虽如此:
您可以使用哈希而不是数组。哈希不会将hash[-1]
重新解释为其他内容。
答案 3 :(得分:0)
您可以覆盖默认Array的行为。请注意,当索引超出范围时,Array #fetch
方法会抛出异常。您可以将该方法包装在#[]
中。这是一个例子
class Array
def [](index)
self.fetch(index)
end
end
现在,它应该工作。额外的好处是,您不需要实现任何新的东西。只需使用现有的标准实现。