如何在Ruby中编写辅助方法以减少代码冗余?
解决方案
你可以通过建立口味与对应方法的映射,再封装统一的计算逻辑来消除冗余代码,具体实现如下:
1. 定义口味与shop方法的映射
先创建一个常量哈希,把每个口味字符串对应到shop对象的方法名:
FLAVOR_TO_METHOD = { 'STRAWBERRY' => :straw, 'CHOCOLATE' => :choc, 'VANILLA' => :van, 'MANGO' => :man }
2. 封装辅助方法
写一个辅助方法,统一处理重复的数值计算逻辑:
def calculate_icecream_value(flavor, shop) # 获取对应方法名,若口味不存在则返回nil(可根据需求调整默认值) method_name = FLAVOR_TO_METHOD[flavor] return nil unless method_name # 执行统一的计算逻辑 (shop.send(method_name) * 1000).round(5) end
3. 简化原方法
现在你的原方法可以大幅简化:
def icecream # Ruby方法名推荐蛇形命名,而非大驼峰 # ...其他代码 value = calculate_icecream_value(flavors, shop) # ...其他代码 end
补充说明
- 使用
send方法可以通过符号形式的方法名,动态调用shop对象的对应方法 - 后续新增口味时,只需要在
FLAVOR_TO_METHOD哈希里添加新的键值对即可,无需修改计算逻辑 - 遵循Ruby命名规范:方法名用蛇形(
icecream而非Icecream),变量名小写(value而非Value)
内容的提问来源于stack exchange,提问作者anyonymousgamer
相关产品推荐
相关产品推荐

