self.send(method,=,value)不起作用

时间:2011-01-09 02:27:11

标签: ruby-on-rails ruby

我正在尝试创建一个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 个答案:

答案 0 :(得分:51)

您遇到此问题是因为方法名称错误。使用带有setter的发送时,您需要在方法名称中包含=,如下所示:

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

以上应该可以解决问题。