代码之家  ›  专栏  ›  技术社区  ›  Erik Escobedo

我是在滥用“救援”来换取零支票吗?

  •  9
  • Erik Escobedo  · 技术社区  · 14 年前

    rescue 为了一切,而不仅仅是为了“拯救”例外。我是说,我只是喜欢它省去了我的验证和重复检查数据的方式。

    举个例子,假设我有一个模型 Item 什么可能有或可能没有 User . 然后,当我想得到物品所有者的名字时,我写下:

    item.user.name rescue ""
    

    而不是像

    item.user.nil? ? "" : item.user.name
    

    同样的想法,因为 nil.name 触发一个异常,我用它来解救 "" 营救 到处说的话让我感到不安全。

    营救

    4 回复  |  直到 12 年前
        1
  •  7
  •   theIV    14 年前

    try . Documentation

    就你而言, item.user.try(:name)

        2
  •  3
  •   Pete    14 年前

        3
  •  1
  •   Joshua    14 年前

    像大多数其他语言一样,自己进行检查比使用rescue运行得更快。

        4
  •  1
  •   triskweline    14 年前

    作为你的另一个选择 rescue andand 宝石。这和 try 另一个帖子建议,但更好。让你说:

    item.user.andand.name
    

    表达式将是 nil 如果 item.user .