class A def method_missing(method_sym, *arguments, &block) if method_sym == :[] && arguments.first.is_a?(Integer) # do something here with value (search something or create) arguments.first else super end end end a = A.new a[2]