在Ruby中,访问嵌套数组+哈希的更干净的方法是什么?

在Ruby中,访问嵌套数组+哈希的更干净的方法是什么?,ruby,Ruby,我有以下代码,我觉得可能有更干净的方法来访问我想要的对象: id = job.args.size > 0 && job.args[0]['arguments'].size > 0 ? job.args[0]['arguments'][0] : nil 这是为了: dig是为数组、哈希和结构定义的,因此它可以处理大多数类型的嵌套结构。这就是它的用途: dig是为数组、哈希和结构定义的,因此它可以处理大多数类型的嵌套结构。如果我们只能看到一行代码,就很难给出如何更好地组

我有以下代码,我觉得可能有更干净的方法来访问我想要的对象:

id = job.args.size > 0 && job.args[0]['arguments'].size > 0 ? job.args[0]['arguments'][0] : nil
这是为了:

dig是为数组、哈希和结构定义的,因此它可以处理大多数类型的嵌套结构。

这就是它的用途:


dig是为数组、哈希和结构定义的,因此它可以处理大多数类型的嵌套结构。

如果我们只能看到一行代码,就很难给出如何更好地组织代码的建议!处理这样一个凌乱的对象意味着您可能会遇到更广泛的设计问题,从而提高代码质量。然而

基于上述情况,一个愉快的情景是:

job.args == [{"arguments"=>["foo"]}]
i、 e.一个数组,其第一个元素是带有键“arguments”的散列,映射到一个非空数组。这看起来很乱

但是,您可以将其简化为:

job.args.dig(0, 'arguments', 0)
这是一个应用注意事项:还需要链接方法调用,并在任何失败时优雅地用nil响应


这个答案假设您使用的是ruby版本>=2.3.0,因为这是dig添加到语言中的时候。如果您运行的是较旧的版本,您还可以使用来支持该功能。

如果我们只能看到一行代码,就很难给出如何更好地组织代码的建议!处理这样一个凌乱的对象意味着您可能会遇到更广泛的设计问题,从而提高代码质量。然而

基于上述情况,一个愉快的情景是:

job.args == [{"arguments"=>["foo"]}]
i、 e.一个数组,其第一个元素是带有键“arguments”的散列,映射到一个非空数组。这看起来很乱

但是,您可以将其简化为:

job.args.dig(0, 'arguments', 0)
这是一个应用注意事项:还需要链接方法调用,并在任何失败时优雅地用nil响应

这个答案假设您使用的是ruby版本>=2.3.0,因为这是dig添加到语言中的时候。如果您运行的是旧版本,还可以使用来支持该功能