我正在尝试理解以下Ruby代码.
它看起来像是attrs一个散列,它作为参数传递,默认值为空散列.
然后attrs.each迭代hash(|k,v|)中的键值对.
通过self.send在此迭代期间调用键值对的元素可以获得什么效果?
def initialize(attrs = {}, *args)
super(*args)
attrs.each do |k,v|
self.send "#{k}=", v
end
end
Run Code Online (Sandbox Code Playgroud)
Sar*_*Mei 26
send 在第一个参数中调用该方法,并将其余参数作为参数传递.
在这种情况下,我假设什么attrs是属性列表.让我们说它是这样的:
{ :name => "John Smith" }
Run Code Online (Sandbox Code Playgroud)
那么在循环中,它会这样做:
self.send "name=", "John Smith"
Run Code Online (Sandbox Code Playgroud)
这相当于
self.name = "John Smith"
Run Code Online (Sandbox Code Playgroud)