Ruby - 检索值,验证并在一行中赋值

时间:2014-12-25 08:29:44

标签: ruby

tc = order.total_cost.to_f rescue nil
msg.totalCost = tc if tc

这里检索total_costorder.total_cost.to_f rescue nil),验证(if tc)并分配(msg.totalCost = tc)。我想知道是否可以在一行中完成所有操作而不必检索order.total_cost两次(假设检索是一个繁重的消费者操作)。

1 个答案:

答案 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