Ruby 如何最小化嵌套的if语句?(红宝石)
我发现我经常在Ruby代码中做这样的事情: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有
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,不知道和。