self.send (метод, =, значение) не работает - PullRequest
13 голосов
/ 09 января 2011

Я пытаюсь создать класс 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 => 'some-name@some-company.com', :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 => 'some-name@some-company.com', :phone => 435543093)

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

Что я делаю не так?

1 Ответ

52 голосов
/ 09 января 2011

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

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

Вышесказанное должно помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...