我有这个循环:
data.each do |variant|
code = prices[variant["vcode"].to_sym]
if code.nil?
reg = sell = sale = " "
else
reg = code[:reg]
sell = code[:sell]
sale = code[:sale]
end
variant["reg"] = reg
variant["sell"] = sell
variant["sale"] = sale
现在,我想缩短代码,就像我之前对 reg = sell = sale = ""
所做的那样:
reg = " "
sell = " "
sale = " "
我也想做
reg = code[:reg]
sell = code[:sell]
sale = code[:sale]
和
variant["reg"] = reg
variant["sell"] = sell
variant["sale"] = sale
我试过这个:
def price_values
%i[reg sell sale]
end
并替换
reg = code[:reg]
sell = code[:sell]
sale = code[:sale]
与
reg, sell, sale = code[price_values]
但它返回nil
。我做错了什么?
最佳答案
data.each do |variant|
code = prices[variant["vcode"].to_sym]
%w|reg sell sale|.each do |e|
variant[e] = code.nil? ? " " : code[e.to_sym]
end
end
或者,更好的是,使用默认哈希函数。
data.each do |variant|
code =
prices[variant["vcode"].to_sym] ||
Hash.new { |h, k| h[k] = " " }
%w|reg sell sale|.each do |e|
variant[e] = code[e.to_sym]
end
end
关于ruby-on-rails - 缩短 .each do 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57719928/