Рубиновый способ избежать затенения для находок

Общим примером, который я нахожу в Ruby, является следующее:

foo = foos.find {|foo| foo.attribute == some_other_attribute }

В IDE, которые проверяют затенение, эта строка жалуется, что foo затеняется.

Заманчивой альтернативой является следующее:

foo = foos.find {|f| f.attribute == some_other_attribute }

Но этот подход нарушает функцию поиска во многих IDE - поиск f в сложном блоке будет кошмаром, и поиск foo.attributes внутри проекта пропустит эту строку кода.

Уродливое решение, к которому я склонялся, просто префикс имени переменной с его областью:

foo = foo.find {|block_foo| block_foo.attribute == some_other_attribute }

В то время как это прекрасно для коротких блоков, что-нибудь более длинное начинает генерировать много шума от всего block_ загрязняющего код.

Существует ли стандартный способ Ruby для выполнения такого рода заданий? В частности, я ищу решение, которое отвечает следующим критериям:

  • Имена переменных не сокращаются
  • Имена переменных остаются описательными, какой тип объекта они содержат
  • IDE не кричат о затенении
1 ответ

Я предпочел бы сделать переменную с левой стороны более описательной:

blue_box = boxes.find { |box| box.color == BLUE }

Даже что-то более общее, вроде found_foo я бы счел более описательным.

licensed under cc by-sa 3.0 with attribution.