Arrayオブジェクトにもの申す

irb(main):001:0> [1,2,3][3]
=> nil

何故、例外を起こさない!!*1

と、いうことで例外を起こすようにArray#[]を再定義してみる。

#!/usr/bin/ruby
class Array
  def [](i)
    raise IndexError unless self.size>i.abs
    self.at(i)
  end
end
a=Array[1,2,3]
puts a[0] # =>1
puts a[2] # =>3
puts a[3] # =>IndexError

まあ、Array#atを使った時点で負け犬か(涙

追記11/16 : http://d.hatena.ne.jp/n9d/20071116 へ書き直した

*1:ただ単に 上の記事のto_aが悔しかっただけともいう