Зачем вам использовать!! оператор

Я встретил 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