我有下面的代碼,我覺得有可能是訪問,我想的對象一個更清潔的方式:在Ruby中訪問嵌套數組+散列的更乾淨的方式是什麼?
id = job.args.size > 0 && job.args[0]['arguments'].size > 0 ? job.args[0]['arguments'][0] : nil
我有下面的代碼,我覺得有可能是訪問,我想的對象一個更清潔的方式:在Ruby中訪問嵌套數組+散列的更乾淨的方式是什麼?
id = job.args.size > 0 && job.args[0]['arguments'].size > 0 ? job.args[0]['arguments'][0] : nil
如果我們只能看到它的一行,很難就如何更好地組織代碼給出建議!處理這樣一個雜亂的對象表明你可能有更廣泛的設計問題,可以提高代碼質量。然而...
基於上述的「高興場景」是,如果:
job.args == [{"arguments"=>["foo"]}]
即其第一元件與鍵'arguments'
散列,它映射到非空數組的數組。這看起來很凌亂!
job.args.dig(0, 'arguments', 0)
這將Array#dig
:
但是,您可以簡化這(注意:這裏還有Hash#dig
),以鏈的方法調用,並與nil
如果任何失敗優雅地迴應。
這個答案假定您使用紅寶石版本> = 2.3.0
,因爲這是當加入的語言。如果您運行的是舊版本,則還可以使用this gem來支持該功能。