@Stan_1

Как в Ruby «переписать» метод квадратных скобок?

Добрый день!

Не могу найти поиском, не знаю, возможно ли такое. Просьба помочь. Допустим, я пишу свой класс, и в нем у меня есть переменная типа Hash. Что-то вроде такого

class MyClass
   def initialize
      @hash = Hash.new
   end
end


И теперь хочу сделать так:

my = MyClass.new
my[:section] = Hash.new
my[:section][:subsection] = 10
puts my[:section][:subsection]


Как мне правильно перезаписать квадртаные скобки, чтобы получать доступ к многоуровневому Hash?

Самое простое видится - это наследование от Hash. Но мне нужно еще делать некие преобразования внутри хеша. То есть хотелось бы сделать свой метод. Или принимать такой запрос в method_missing и разбирать там?

Заранее спасибо!
  • Вопрос задан
  • 282 просмотра
Пригласить эксперта
Ответы на вопрос 2
viktorvsk
@viktorvsk
В том, что вы написали - Ваш класс не при чем.
Переопределить скобки - без проблем.
class MyClass
  def self.[](var)
  end

  def [](var)
  end
end

Но в показанном случае Вы хотите манкипатчить встроенный хэш.
В таком случае, нужен не MyClass, а MyHash, который и будет наследовать Hash. Вот ему и меняйте скобки
Ответ написан
Комментировать
doromones
@doromones
Работаю с php/ruby
я думаю что-то типа такого

я обычно использую конструкцию
h = Hash.new { |h, k| h[k] = Hash.new(&h.default_proc) }

h['bar'] -> {}
h['tar']['star']['par'] -> {}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы