我有一個數組date_array
。如果i
是0
,我想date_array[i-1]
返回nil
或例外。我以爲我可以爲此派生一個Array的子類,但我不確定在那之後要去哪裏。有任何想法嗎?需要禁止數組中的負指數值
2
A
回答
3
你可以做到這一點,但你不應該需要。我覺得你錯了,因爲責任是你的,而不是Array的,來檢查被傳遞的索引值。
僅僅是一個例子
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
0
好吧,我同意亞當,這將會是理想的控制指標,而不是這樣做:
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]
意思是別的。
0
您可以重寫默認數組的行爲。請注意,當索引超出限制時,Array #fetch
方法會引發異常。您可以將該方法包裝在#[]
中。這裏是一個例子
class Array
def [](index)
self.fetch(index)
end
end
現在,它應該只是工作。額外的好處是,你不需要實施任何新的東西。只需使用現有的標準實現即可。
相關問題
- 1. odeint禁止負值
- 2. 負指數值?
- 3. 需要優化計數的正負值
- 4. Perl中的數組和負指數
- 5. PHP中數組的負指數
- 6. 禁止<f:convertNumber>中的長數字的指數值
- 7. 需要增加js數組中的值
- 8. 需要在數組中刪除空值
- 9. 數組條件語句:需要存儲的值不等於在指數值ç
- 10. 需要一起組成數組,MySQL表中相同的值組
- 11. 阻止C#中的負數?
- 12. 指數和負數
- 13. 負指數中的Fortran
- 14. 需要regex.match組中的值
- 15. 嵌套子數組中的選定值,需要父數組以獲取值
- 16. 中位數:需要數值數據
- 17. Jersey:禁止未指定的參數
- 18. 聲明指向數組的指針時是否需要括號?
- 19. 將值賦給數組需要memcpy
- 20. 需要一個值從數組
- 21. 包裝一個需要指針數組的函數
- 22. 需要指針聲明來保存整數數組的地址
- 23. 負指數
- 24. sparse_to_dense需要指數在0.7
- 25. 負數需要用paranthnes顯示
- 26. 需要ctype_digit爲負數返回true
- 27. 什麼時候Angular2中的組件元數據需要指令?
- 28. 字符指針的二維數組是否需要被兩個null終止?
- 29. 無法在數組中保留負值
- 30. 「禁止保存需要的表更改重新創建」負面影響
是的,改變直接調用數組通過[]到一個函數(就像你上面)一樣正常工作。謝謝。 – davej