Зачем вам использовать!! оператор
Я встретил abit ruby в примере
def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
Зачем вам когда-либо использовать !!
? Это не то же самое, что
return self.roles.find_by_name(role.to_s.camelize)
Добавляет ли знак двойного восклицания что-то к оценке?
Ответы
Ответ 1
Вы используете его, если хотите только логическое, а не объект. Любой объект non-nil, за исключением boolean false
, представляет true
, однако вы также должны вернуть данные. Двойным образом отрицая это, вы возвращаете правильное логическое значение.
Ответ 2
Отказ от ответственности: не рубиновый программист, но имеющий удар по этому вопросу.
!!
, double bang или "not not", может преобразовать значение в логическое. Один !
возвращает boolean напротив, а другой bang после этого перевернет его на свое нормальное булево значение.
Ответ 3
Это двойное отрицание, которое приводит к булеву:
irb(main):016:0> !1
=> false
irb(main):013:0> !0
=> false
irb(main):014:0> !nil
=> true
irb(main):015:0> !!nil
=> false
Ответ 4
Да, в вашем случае вы можете быть уверены, что функция возвращает только true или false. Если вы опустите! вы вернете список ролей
Ответ 5
с помощью этого небольшого трюка вы получите фактическое логическое значение выражения, например:
!! 3
=> true
!! nil
=> false
!! 0
=> true
В Ruby все, что не ноль или ложь, верно!
В вашем примере кода этот трюк гарантирует, что вы никогда не вернете ничего другого
но true или false
Если вы опустите!!, вы вернете список ролей или nil