在 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 条件。谢谢。
在 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 条件。谢谢。
也许是一种更面向对象的方法?这种方法使测试代码更容易,并且可能是可重用的。
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
你可以尝试这样的事情:
qty = 2
total_price = room.fetch("price").to_f * qty
但是这段代码有个问题,如果price
hash中没有字段,就会抛出异常。是否满足您的需求?
如何定义一个帮助方法,以便您可以直接从哈希中提取浮点数:
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
很难缩短这个时间,我会这样做:
qty, avg_price, total_price = 2, nil, nil
if room["price"]
avg_price = Float(room["price"])
total_price = avg_price * qty
end