1

Ruby コードでこの種のことをよく行っていることがわかりました。

if person
  if person.shirt
    if person.shirt.sleeve
    ...
  end
end

..私は避けるためにこれを行いますNoMethodErrors。これを1行に折りたたむ方法があるかどうか疑問に思っています。

if person && person.shirt && person.shirt.sleeve

基本的に、コードをよりコンパクトにしたいと考えています。

4

1 に答える 1

6

その中で袖で何かしたいですよね?

Rails には便利なヘルパーtry. すべてがうまくいけば値を返し、nilそうでなければ値を返します。したがって、この例では、person.shirtまたはそれperson自体が nil の場合、try も nil を返します。

if sleeve = person.try(:shirt).try(:sleeve)
  # do your stuff
end

バニラルビーの場合andand、同様の機能を提供する gem を使用できます。

if sleeve = person.andand.shirt.andand.sleeve
  # do your stuff
end

Ruby 2.3以降、安全なナビゲーション演算子を使用できます:

if sleeve = person&.shirt&.sleeve
  # do your stuff
end
于 2012-07-09T20:26:51.077 に答える