在ruby中有更简单的方法吗?
ops_schema_name = "ops"
tables.each do |table|
table.schema_name = ops_schema_name
end
阅读属性时,它是否像tables.collect(&:schema_name)
一样简单?
我假设有一个设置者的快捷方式。
答案 0 :(得分:2)
你可以做到
schema_name_updater = -> table { table.schema_name = 'ops' }
tables.each(&schema_name_updater)
答案 1 :(得分:0)
根据Jörg的好回答,我提出了这个通用解决方案,适用于任何类型的对象和任意数量的属性:
attrs_setter = -> obj, attrs { attrs.each { |k, v| obj.send("#{k}=", v) } }
$> tables.each { |table| attrs_setter.call(table, { :name => 'ops' }) }
$> Obj = Struct.new(:a, :b)
# => Obj
$> objs = Array.new(2) { |i| i = Obj.new('hi', 'there') }
# => [#<struct Obj a="hi", b="there">, #<struct Obj a="hi", b="there">]
$> objs.each { |obj| attrs_setter.call(obj, { a: 'good', b: 'bye' } ) }
# => [#<struct Obj a="good", b="bye">, #<struct Obj a="good", b="bye">]