Self.send(метод, =, значение) не работает

Я пытаюсь создать класс Ruby, где метод initialize принимает хэш опций. Тогда у меня есть эти параметры как attr_accessor для класса. Теперь я мог бы сделать что-то вроде

class User
  attr_accessor :name, :email, :phone

  def initialize(options)
    self.name = options[:name]
    self.email = options[:email]
    self.phone = options[:phone]
  end
end

User.new(:name => 'Some Name', :email => '[email protected]', :phone => 435543093)

но он не чувствует себя очень СУХОЙ для меня. Вместо этого я хотел бы сделать

class User
  attr_accessor :name, :email, :phone

  def initialize(options)
    options.each do |option_name, option_value|
      # Does not work!!
      self.send(option_name, '=', option_value)

      # Does not work either!!
      self.send(option_name, '=' + option_value)
    end
  end
end

User.new(:name => 'Some Name', :email => '[email protected]', :phone => 435543093)

но я не могу заставить синтаксис работать!

Что я делаю неправильно?

Ответ 1

Вы получаете эту проблему, потому что имя метода неверно. При использовании отправки с установщиком вам нужно включить = в имя метода, например:

self.send("#{option_name}=", option_value)

Вышеприведенное должно сделать трюк.