Ruby on Rails中编写Enum根据键查找对应值的函数方法
问题修复方案
原代码错误原因
- 缺少待查找的目标键入参,函数无法获知需要匹配的键值
- 条件判断逻辑错误:
AaaBbb.numbers[:key]是固定查找键为:key的枚举值,和遍历得到的key无关联,完全无法完成匹配 - 循环逻辑存在致命缺陷:无论第一次迭代是否匹配,都会直接执行return终止函数,永远不会遍历后续的枚举项
最优实现代码
Rails 枚举的numbers方法本质返回的是标准Ruby Hash,直接使用Hash原生的fetch方法即可实现需求,无需手动遍历:
def find_value(target_key) # 将传入的键统一转为字符串,兼容符号/字符串入参,同时适配两种枚举定义写法 AaaBbb.numbers.fetch(target_key.to_s, 0) end
逻辑说明
- 入参
target_key接收你需要查找的枚举键,支持传入符号(如:a)或字符串(如"a") target_key.to_s将入参统一转为字符串格式,适配你两种枚举定义的写法,避免类型不匹配导致的查找失败fetch方法会自动匹配Hash中对应的键:匹配成功直接返回对应枚举值,匹配失败则返回你指定的默认值0
内容的提问来源于stack exchange,提问作者wpppppp
相关产品推荐
相关产品推荐

