2011-01-09 22 views
13

initializeメソッドがオプションのハッシュを取るRubyクラスを作成しようとしています。私はクラスのためにこれらのオプションをattr_accessorとして持っています。今、私は何かをすることができましたself.send(メソッド、=、値)が機能しません

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) 

しかし、それは私に非常にDRY感じません。代わりに、私はしたいと思います

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

関連する問題