在Ruby on Rails中,有没有更好的方法来写这个:
qty = 2
avg_price = room["price"].to_f if room["price"].present?
total_price = (avg_price * qty) if avg_price.present?
特别是第2和第3行。我发现自己经常使用if-else条件。感谢。
答案 0 :(得分:0)
您可以尝试这样的事情:
qty = 2
total_price = room.fetch("price").to_f * qty
但是这个代码存在问题,如果哈希中没有price
字段,则会引发异常。它满足你的需求吗?
答案 1 :(得分:0)
这很难缩短,我只会这样做:
qty, avg_price, total_price = 2, nil, nil
if room["price"]
avg_price = Float(room["price"])
total_price = avg_price * qty
end
答案 2 :(得分:0)
如何定义一个帮助器方法,以便您可以直接从哈希中提取浮点数:
class Hash
def get_f key; fetch(key).to_f if key?(key) end # Or `if self[key].present?`
end
然后执行:
qty = 2
avg_price = room.get_f("price")
total_price = avg_price * qty if avg_price
答案 3 :(得分:0)
也许是一种更加面向对象的方法?这种方法可以更容易地测试代码,并且可以重复使用。
class PriceCalculator
def init(quantity, price)
@quantity = quantity
@price = price.presence && price.to_f
end
def total
@price * @quantity if @price
end
end
total_price = PriceCalculator.new(2, room["price"]).total