2015-10-06 2 views
-1

Я по-прежнему новичок в этой логике. Возможно, мне нужно больше кофе ... Но здесь идет.Лучший способ написать эту логику, сравнивая три переменные

У меня есть три значения цвета, размера и материала. И мне нужно назначить их массиву «options».

Эти переменные имеют либо значение, либо назначаются «ноль». Таким образом, следующий будет возвращать истинным или ложным для каждого:

color.nil? 
size.nil? 
material.nil? 

Если цвет и размер равны нулю, то я хочу значение материала, назначенного опций. Который прямо вперед:

if color.nil? && size.nil? 
    options = material 
end 

Однако проблема у меня есть, если цвет или размер НЕ ноль, то я хочу, чтобы присвоить один или оба из тех массива параметров, а не использовать переменный материал на всех.

Каков самый простой способ сделать это?

+0

что ** Параметры **, массив или хэш? –

+0

опции - массив – ToddT

+0

И как бы вы использовали этот хэш? – ToddT

ответ

1

Я не уверен, если это лучший способ справиться с конкретным сценарием сценариев использования, но просто ответить на ваш вопрос, вы можете сделать это следующим образом:

if color.nil? && size.nil? 
    options = material 
else 
    options = [color, size].reject(&:nil?) 
end 
+0

безупречный .. спасибо! – ToddT

0

с этим кодом:

[color, size, material].compact.first 

Вы говорите, верните первое, что не является нулевым. Итак, если цвет имеет значение null, но размер имеет значение 4, а у материала есть значение 9, выражение вернется 4. Если цвет и размер равны нулю, тогда вы получите любое значение, являющееся существенным (в случае, если оно имеет значение). Если все значения равны нулю, вы получите нуль.

или другой способ:

options = color || size || material 
+0

За исключением того, что в рубине нет 'null' :) –

+0

да, вы правы: D. Кстати, я все еще верю, что второй вариант, который я ставлю, выглядит лучше, чем принятый ответ :-) – fanta

+0

Это выглядит лучше, но это неправильно. Если цвет и размер не равны нулю, ваш код будет выбирать только цвет. Но '[цвет, размер]' необходим. –

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