1

与えられた:

array = {first: {second: {one: 1, two: 2, three: 3 }}}

何でもできると仮定するとnil、nil につまずくことなくネストされた値にアクセスする最も簡単で簡潔な方法は何でしょうか? メンバーのいずれかが存在しない場合は、 を返すだけnilです。

私たちはこれらを思いつきました:

ピュア ルビー:

value = array.fetch(:first, {}).fetch(:second, {}).fetch(:four, nil)
value = begin array[:first][:second][:four]; rescue; end

ルビー・オン・レール:

value = array.try(:[], :first).try(:[], :second).try(:[], :four)

あなたは何を思いつくことができますか?あなたはどちらの方法を好みますか、またその理由は何ですか?

ありがとう!

4

2 に答える 2

1

コーディングスタイルの問題です。Ruby 2.0 では、これを行うこともできます。

value = array[:first].to_h[:second].to_h[:four]

to_h毎回入力したくない場合は、メソッドを定義できます。

class Hash
  def safe_fetch k; self[k].to_h end
end
value = array.safe_fetch(:first).safe_fetch(:second)[:four]
于 2013-06-06T01:56:12.320 に答える