我有以下代码,我觉得可能有一种更清晰的方式来访问我想要的对象:
id = job.args.size > 0 && job.args[0]['arguments'].size > 0 ? job.args[0]['arguments'][0] : nil
答案 0 :(得分:4)
答案 1 :(得分:4)
如果我们只能看到它的一行,就很难就如何更好地组织代码提出建议!处理这样的混乱对象表明您可能有更广泛的设计问题,可以提高代码质量。然而...
基于以上所述,“快乐情景”是:
job.args == [{"arguments"=>["foo"]}]
即。一个数组,其第一个元素是一个键为'arguments'
的哈希,它映射到一个非空数组。这看起来很乱!
但是,您可以将其简化为:
job.args.dig(0, 'arguments', 0)
这是应用Array#dig
(注意:还有Hash#dig
)来链接方法调用,如果有任何失败,请优雅地回复nil
。
此答案假设您使用的是 ruby版本> = 2.3.0
,因为这是在语言中添加dig
的时间。如果您运行的是旧版本,则还可以使用this gem来反向移植该功能。