obj.method
obj[:method]
В целом, всё просто. Скажем, можно проверить, есть ли такая переменная в объекте:
def [](raw_key_attr)
key_attr = raw_key_attr.to_s.to_sym
return nil unless self.instance_variables.include?(:"@#{key_attr}")
self.send key_attr
end
Зачем это нужно? К примеру, чтобы объект в массиве нормально работал с методом
pluck, который как раз вызывает всё через квадратные скобки. То есть вот этоobjects_array.pluck :id
значит, что на каждом объекте массиве вызывается
obj[:id], поэтому если метода [] нет, то и pluck не сработает.