ruby - 如何最小化嵌套的 if 语句? ( ruby )

标签 ruby

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

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

..我这样做是为了避免 NoMethodErrors。我想知道是否有任何方法可以将其折叠成一行,而没有明显的

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

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

最佳答案

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

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

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

对于 Vanilla ruby ,您可以使用 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

关于ruby - 如何最小化嵌套的 if 语句? ( ruby ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11402531/

相关文章:

ruby - 通过 passenger 自动安装 nginx

ruby-on-rails - 为生产 Rails 应用程序设置管理员用户

ruby-on-rails - 有没有办法在另一个 <%= %> 中包含一个 <%= %> 而不会导致错误?

ruby-on-rails - 有什么反对 bitnami.org Ruby/Rails/Redmine Stack 的吗?

ruby-on-rails - 如果函数调用返回某些东西,Ruby/Rails 返回结果

java - Ruby 中的简单数据结构等同于 Java

ruby - 在 Ruby 中处理大型 CSV 文件

ruby - 如何对二维数组求和

arrays - 如何将子数组添加到自身? ruby

ruby - 在 OS X 上使用 Homebrew 还是 ruby​​ 版本管理器?