Ruby 如何最小化嵌套的if语句?(红宝石)

Ruby 如何最小化嵌套的if语句?(红宝石),ruby,Ruby,我发现我经常在Ruby代码中做这样的事情: if person if person.shirt if person.shirt.sleeve ... end end …我这样做是为了避免出现命名错误。我想知道有没有什么方法可以把它压缩成一行,而不需要明显的 if person && person.shirt && person.shirt.sleeve 基本上,我想让我的代码更紧凑。在那些ifs中,你想用袖子做点什么,对吗 Rails有

我发现我经常在Ruby代码中做这样的事情:

if person
  if person.shirt
    if person.shirt.sleeve
    ...
  end
end
…我这样做是为了避免出现命名错误。我想知道有没有什么方法可以把它压缩成一行,而不需要明显的

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

基本上,我想让我的代码更紧凑。

在那些ifs中,你想用袖子做点什么,对吗

Rails有一个很好的助手。如果一切顺利,它返回值,否则返回nil。因此,在本例中,如果
person.shirt
或甚至
person
本身为nil,try也将返回nil

if sleeve = person.try(:shirt).try(:sleeve)
  # do your stuff
end
对于香草ruby,您可以使用提供类似功能的gem

if sleeve = person.andand.shirt.andand.sleeve
  # do your stuff
end
自ruby 2.3以来,您可以使用安全导航操作符:

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

在那些“如果”里面,你想用袖子做点什么,对吗

Rails有一个很好的助手。如果一切顺利,它返回值,否则返回nil。因此,在本例中,如果
person.shirt
或甚至
person
本身为nil,try也将返回nil

if sleeve = person.try(:shirt).try(:sleeve)
  # do your stuff
end
对于香草ruby,您可以使用提供类似功能的gem

if sleeve = person.andand.shirt.andand.sleeve
  # do your stuff
end
自ruby 2.3以来,您可以使用安全导航操作符:

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

谢谢知道try,不知道
。谢谢。知道try,不知道