Ruby实现支持任意数量参数的Hash卡路里统计函数
Ruby 卡路里统计器:实现支持任意参数的order函数
你需要用可变位置参数(*items)来改造order函数,**是用来接收关键字参数的,和你要传的位置参数不匹配,所以之前用**a没效果。
直接上可用的实现代码:
@menu = { "hamburger" => 250, "Cheese burger" => 350, "cola" => 35, "salad" => 120, "dessert" => 350 } def order(*items) # 累加所有传入菜品的卡路里,不存在的菜品默认计0(可根据需求调整) items.sum { |item| @menu.fetch(item, 0) } end
使用示例
- 单个菜品调用:
order("hamburger")→ 返回250 - 多个菜品调用:
order("Cheese burger", "salad")→ 返回470 - 若想对不存在的菜品报错,把
fetch(item, 0)改成fetch(item)即可,此时传入未在菜单里的菜品会抛出KeyError
原理说明
*items会自动把所有传入的位置参数打包成一个数组,不管你传1个、2个还是N个参数,都能被正确接收sum方法遍历这个数组,取出每个菜品对应的卡路里值并累加,完成统计
内容的提问来源于stack exchange,提问作者AlHey
相关产品推荐
相关产品推荐

