rai*_*iri 13 ruby ruby-on-rails
我正在尝试创建一个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)
Run Code Online (Sandbox Code Playgroud)
但它对我来说并不觉得很干.相反,我想做
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)
Run Code Online (Sandbox Code Playgroud)
但我不能让语法工作!
我究竟做错了什么?
von*_*rad 52
您遇到此问题是因为方法名称错误.使用setter发送时,您需要=在方法名称中包含,如下所示:
self.send("#{option_name}=", option_value)
Run Code Online (Sandbox Code Playgroud)
以上应该可以解决问题.