2016-10-26 1 views

ответ

0

вы могли бы сделать это

a = b if !b.nil? 

или

a = b if b 

или

a = b if b != nil 

Дело о present? это защищает вас от ловушки пустых массивов, hashs и другие коллекции. Поэтому они будут работать, если вас не интересует пустая коллекция.

+0

Последний из них категорически не такой, как другие, или то, о чем попросил ОП. 'a || = b' более сродни' a = b, если a', чем 'a = b, если b', что как совсем другое значение. – philomory

+0

Вы правы, потому что нет никаких указаний на то, что это начальное задание. –

1

Просто a = b if b.present? по себе функционально эквивалентно:

if b.present? 
    a = b 
else 
    a = nil 
end 

, чтобы вы могли использовать Object#presence:

присутствие()
Возвращает приемник, если он присутствует в противном случае возвращает nil. object.presence эквивалентно

object.present? ? object : nil 

так:

a = b.presence 

Если a уже имеет значение, и вы на самом деле говорят:

a = something_interesting 
a = b if b.present? 

тогда вы могли бы сказать:

a = b.presence || something_interesting 
0

Вы можете использовать оператор ||=, но это зависит от того, что вы хотите от своего кода. Этот оператор присваивает значение b к a, если b не nil .В примера, если а = 5 и выполнить следующую операция a ||= b значения b будет назначено aтолько еслиb не nil, но если не a ранее объявленное значение a будет nil для этого кода a ||= b.

Примеры:

irb(main):001:0> b = nil 
=> nil 
irb(main):002:0> a ||= b 
=> nil 
irb(main):003:0> b = 5 
=> 5 
irb(main):004:0> a ||= b 
=> 5 
irb(main):005:0> a ||= nil 
=> 5 
0

|| = оператор является то, что вы ищете. Он проверяет, является ли операнд нулем или присутствует перед назначением значения. Если текущий не присваивается, если значение nil или undefined присвоит значение.

[1] pry(main)> a 
NameError: undefined local variable or method `a' for main:Object 
from (pry):1:in `__pry__' 
[2] pry(main)> a ||= 100 
=> 100 
[3] pry(main)> a = nil 
=> nil 
[4] pry(main)> a ||= 100 
=> 100 
[5] pry(main)> a ||= 200 
=> 100 
Смежные вопросы