我的方法是目前這樣的:紅寶石法局部變量 - 簡單的重構的情況下
def calculate
bill = 0
order.each {|k, v| bill += restaurant.show_menu[k]*v}
bill
end
它看起來真的很醜,但我需要它返回bill
。考慮將bill
作爲實例變量,並因此在我的對象初始化時定義它,但我不在其他地方使用它。什麼是重構這個最好的方法?
我的方法是目前這樣的:紅寶石法局部變量 - 簡單的重構的情況下
def calculate
bill = 0
order.each {|k, v| bill += restaurant.show_menu[k]*v}
bill
end
它看起來真的很醜,但我需要它返回bill
。考慮將bill
作爲實例變量,並因此在我的對象初始化時定義它,但我不在其他地方使用它。什麼是重構這個最好的方法?
這裏是一種可能的方式:
def calculate
order.reduce(0) {|bill, (k, v)| bill + restaurant.show_menu[k]*v}
end
謝謝。我以前見過reduce方法,但我不知道在這種情況下使用它。 – ugotchi
@ggwc你可能想接受一個答案,如果有幫助..看看[如何接受答案](http://meta.stackexchange.com/a/5235/226854)。你會得到+2分,許多新用戶似乎錯過接受答案。你之前的問題有一個很好的答案,請接受一個。如果您對目前的答案不滿意,可以等待幾小時或幾天後再接受。 –
@ggwc您還可以使用'map'和'reduce'來分隔各個步驟,例如'order.map {| k,v | restaurant.show_menu [k] * v} .reduce(0,:+)' – Stefan
def calculate
order.map { |k, v| restaurant.show_menu[k] * v }.reduce(:+)
end
map
返回一個數組包含值; reduce
在每個元素上應用:+
方法,這意味着總結它們。
看起來'訂單'和'餐廳'是方法,但你沒有提供任何解釋。請詳細說明。 –
你爲什麼覺得它很難受?局部變量有什麼問題? – Meier
有幾個Ruby方法來解決這種問題。 – sbs