2011-01-09 66 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

相關問題