我的方法目前是这样的:
def calculate
bill = 0
order.each {|k, v| bill += restaurant.show_menu[k]*v}
bill
end
它看起来很难看,但我需要它才能返回bill
。考虑将bill
作为一个实例变量,然后在我的对象初始化时定义它,但我不在其他任何地方使用它。什么是重构这个的最好方法?
答案 0 :(得分:7)
这是一种可能的方式:
def calculate
order.reduce(0) {|bill, (k, v)| bill + restaurant.show_menu[k]*v}
end
答案 1 :(得分:3)
def calculate
order.map { |k, v| restaurant.show_menu[k] * v }.reduce(:+)
end
map
返回包含值的数组; reduce
对每个元素应用:+
方法,这意味着对它们进行总结。