2011-01-09 15 views
13

initialize yönteminin bir seçenek karması aldığı bir Ruby sınıfı oluşturmaya çalışıyorum. Daha sonra sınıf için attr_accessor s olarak bu seçenekleri var. Şimdi,self.send (yöntem, =, değer) çalışmıyor

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) 

gibi bir şey yapabilirim ama bana karşı çok sert davranmıyor. Bunun yerine,

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) 

yapmak isterim ama çalışma sözdizimini alamıyorum!

Neyi yanlış yapıyorum?

cevap

50

bu sorunu alıyoruz. Bir belirleyici ile bir gönderme kullanırken, böyle bir yöntem adına = dahil gerekir:

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

yukarıdaki hile yapmak gerekir.

+0

teşekkür ederiz !! Bu mantıklı. – raikiri

İlgili konular