メソッド[]

当然ながら、(i, x)としてメソッドを定義すると、a[123,456,789]などは書けなくなります。

class Rubyco
  def [](i, x)
    puts "i=#{i}, x=#{x}"
  end
  def []=(i, v)
    puts "i=#{i}, v=#{v}"
  end
end

a = Rubyco.new
a[123] = 456      #=> i=123, v=456
a[123,456]        #=> i=123, x=456
a[123,456,789]    #=> wrong number of arguments (3 for 2) (ArgumentError)

配列で受ければOK.

class Rubyco
  def [](*args)
    puts "args=#{args.join(',')}"
  end
end

a = Rubyco.new
a[1]      #=> args=1
a[1,2]    #=> args=1,2
a[1,2,3]  #=> args=1,2,3