假设我有用户输入,可以是:
input = { user_id: 5, ... }
或者这个:
input = { app_id: 5, ... }
我想要返回:user_id或:app_id,具体取决于提供的内容。我可以这样做:
(input.keys & [:user_id, :app_id]).first
是否有更优雅,更红宝石,惯用的方法呢?
这比上面更好还是更差?:
input.slice(:user_id, :app_id).keys.first
(答案不需要严格来自Ruby 2.2 stdlib,Rails方法也欢迎)
答案 0 :(得分:4)
答案 1 :(得分:1)
你的解决方案已经足够好了。我更喜欢的另一种选择:
input = { app_id: 5, ... }
KEYS = [:app_id, :user_id, :foo_id]
input.find { |key, value| KEYS.include? key }
通过这种方式,您可以将所需的what
与您想要的how
分开。您甚至可以从文件中分配KEYS,这样您甚至不必打开代码来添加或删除查找中的键。但那可能是过度工程。
我会为KEYS
艰难寻找一个更好的名字。命名很难。
答案 2 :(得分:1)
为什么不呢:
input.key?(:user_id) ? :user_id : :app_id
?我错过了什么吗?