2014-01-17 1 views
0

Есть ли более чистый синтаксис для приведенного ниже примера? Очевидно, что это не слишком большая проблема для примера, но с вызовами методов и массивами как частью объекта, я идеально хочу супер-локальную переменную только для этого объекта, то есть «это» или что-то еще.Чистый синтаксис для объекта If, помещенного на объект

obj? obj : ''

, если объект присутствует, поместить объект. В противном случае ничего не ставьте.

ответ

1

Обычная Руби-иш способ сделать это с помощью короткого замыкания ИЛИ:

obj || '' 

Помните, что это не работает должным образом, если obj может законно быть false; вам лучше провести тестирование против obj.nil? явно в этом случае.

Если у вас есть большие цепи методов, которые необходимы для отправки и любой из результатов может быть nil, посмотрите на andand gem:

obj.andand.somemethod.andand.anothermethod || '' 

Наконец, если вы используете Rails, ActiveSupport дает вы: try method:

obj.try(:somemethod).try(:anothermethod) || '' 
+0

Awesome. Есть ли простой способ вернуть 'nil', даже если вы проверяете под-объект? т.е. у меня есть хэш, и я хочу написать 'obj ['attr'] || '' ', однако, если мой« obj »равен нулю, он вылетает, а не возвращает оператор' или'. –

+1

Вот что делает andand gem - это позволит вам писать 'obj.andand ['attr'] || например, '' '. –

+0

Прохладный. Я проверю это! –

Смежные вопросы