Вызов 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
Ответы
Ответ 1
send
вызывает метод в первом параметре и передает остальные параметры в качестве аргументов.
В этом случае я предполагаю, что в attrs
есть список атрибутов. Скажем так:
{ :name => "John Smith" }
Итак, тогда в цикле он делает следующее:
self.send "name=", "John Smith"
что эквивалентно
self.name = "John Smith"