假设我有一个简单的对象。我有attr_accessor
我想要接受的属性,并且我希望能够用对象的散列进行初始化:
class Example
attr_accessor :foo, :bar
def initialize( attributes = {} )
attributes.each do |k,v|
...
end
end
end
在上面的 attributes.each 块中,最好使用send
,如下所示:
send "#{k}=", v
或使用instance_variable_set
,像这样:
instance_variable_set "@#{k}".to_sym, v
...或者完全做其他事情?
我能想到的区别是:
如果在某些时候我用 setter 方法替换了其中一个,则使用
send
会更加一致。attr_accessors
如果传递了意外的值,使用
send
会引发NoMethodError
send
由于这些原因,我倾向于- 我实际上有点喜欢NoMethodError
因虚假初始化数据而被提出的可能性。但是,我在这里是否忽略了其他任何因素,尤其是性能和安全考虑?
我很欣赏任何见解。谢谢!