tc = order.total_cost.to_f rescue nil
msg.totalCost = tc if tc
这里检索total_cost
(order.total_cost.to_f rescue nil
),验证(if tc
)并分配(msg.totalCost = tc
)。我想知道是否可以在一行中完成所有操作而不必检索order.total_cost
两次(假设检索是一个繁重的消费者操作)。
答案 0 :(得分:1)
是的,如果你必须,你可以在一行上完成:
(tc = order.total_cost.to_f rescue nil) and (msg.totalCost = tc)
这是相同的逻辑,可能更容易理解:
if (tc = order.total_cost.to_f rescue nil) then (msg.totalCost = tc) end
如果你愿意使用分号,而且你知道setter不会加注,那就更好了:
begin; msg.totalCost = order.total_cost.to_f; rescue; end