我有一个应用程序,可以根据用户选择的“速度”来计算运费。我试图基于这些速度来重构此if语句。这是当前的if语句:
def walk_thru_each_rate_type(speed_hash, speed_from_db)
if speed_hash.has_key?("flex")
handle_flex_rates(speed_from_db)
end
if speed_hash.has_key?("fixed")
handle_fixed_rates(speed_from_db)
end
if speed_hash.has_key?("free")
handle_free_shipping(speed_from_db)
end
end
因此,每种方法仅基于“速度”。 flex, fixed or free
和方法名称中具有这些速度。我在想像这样的事情,但是不起作用:
handle_"#{speed}"_rates(speed_from_db)
如何根据速度名称动态调用方法?
答案 0 :(得分:2)
您可以调用Object#send传递方法名称和参数。就您而言,它就像:
self.send("handle_#{speed}_rates", speed_from_db)