2011-01-09 61 views
13

我想创建一个Ruby类,其中initialize方法需要一个选项哈希。然后我为这个班级提供了attr_accessor这些选项。现在,我可以做类似self.send(method,=,value)不起作用

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) 

但我不能让语法工作!

我在做什么错?

回答

50

由于方法名称错误,您会遇到此问题。当使用发送与二传手,你就需要在方法名的=,就像这样:

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

以上应该做的伎俩。

+0

谢谢!这就说得通了。 – raikiri 2011-01-09 02:35:25

相关问题