[ruby] Keep forward with `rescue` (Damn i love it!)


Работа с неявными/неопределенными елементами при помощи rescue.

Чем дальше, тем больше я люблю ruby.
К примеру, всем знакомая конструкция:

name = @user.first_name ? @user.first_name.capitalize : "Anonymous"

С помощью rescue преобретает вид:

name = @user.first_name.capitalize rescue "Anonymous"

При этом также будут отхватываться события, если переменная класса @user не определена.

+На заметку:

rescue e

Не будет отхватывать все эксепшены, а только StandardError.

За наводку спасибо парням из C42.

Advertisements

4 comments

  1. Лёня Шевцов · January 9, 2012

    Есть небольшая проблема: ты не заметишь *никаких* эксепшенов в коде, завернутом в rescue. А вдруг там происходит что-то более серьезное, чем ожидаемая тобой ошибка.

    К тому же, `@user.try(:first_name).try(:capitalize) || ‘Anonymous’`

    • Sfate · January 9, 2012

      Хм, интерсный вариант..
      Но тут тоже свои минусы.
      Если переменная не определена или пустая(nil), то тогда код с `try` просто не выполнится.
      +
      Классы `Fixnum` и `String` не имеют метода try, который по сути пердставляет собой `respond_to`.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s