Подтвердить что ты не робот

Вызов self.send итеративно по аргументу hash для инициализации()

Я пытаюсь понять следующий код Ruby.

Похоже, что attrs - хэш, который передается как аргумент со значением по умолчанию для пустого хэша.

Затем attrs.each выполняет итерацию по ключам, парам значений в хеше (|k,v|).

Какое влияние достигается при вызове self.send элементов пары значений ключа во время этой итерации?

def initialize(attrs = {}, *args)
  super(*args)
  attrs.each do |k,v|
    self.send "#{k}=", v
  end
end
4b9b3361

Ответ 1

send вызывает метод в первом параметре и передает остальные параметры в качестве аргументов.

В этом случае я предполагаю, что в attrs есть список атрибутов. Скажем так:

{ :name => "John Smith" }

Итак, тогда в цикле он делает следующее:

self.send "name=", "John Smith"

что эквивалентно

self.name = "John Smith"