require 'delegate' class MyArray < DelegateClass(Array) def initialize(*args, &bk) super(Array.new(*args, &bk)) end def to_s join('_') end end a = MyArray.new(5) {rand(5)} p a #=>[4, 2, 3, 2, 4] p a.to_s #=>"4_2_3_2_4"
MyArray クラスは(リテラルがない以外)Array とまったく同様に使うことができます。新しいメソッドを作ったりインスタンス変数を定義したりしても、移譲なので、元の Array クラスにはまったく影響しません。