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

ruby operators

2502 просмотра

5 ответа

Я наткнулся на 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)

Добавляет ли добавление двойного восклицательного знака к оценке?

Автор: Benjamin Udink ten Cate Источник Размещён: 12.11.2019 09:40

Ответы (5)


16 плюса

Решение

Вы используете его, если хотите только логическое значение, а не объект. Любой не-ноль объект , за исключением boolean falseявляется true, однако, вы бы вернуть данные , а также. Двойным отрицанием вы возвращаете правильный логический тип.

Автор: Femaref Размещён: 26.09.2011 09:34

7 плюса

Отказ от ответственности: не рубиновый программист, но имеющий удар в этом.

!!, двойной удар или «не нет», может преобразовать значение в логическое значение. Один !возвращает противоположное логическое значение, а другой удар после этого перевернет его на нормальное логическое значение.

Автор: Lewis Norton Размещён: 26.09.2011 09:36

5 плюса

Это двойное отрицание, которое приводит к логическому:

irb(main):016:0> !1
=> false
irb(main):013:0> !0
=> false
irb(main):014:0> !nil
=> true
irb(main):015:0> !!nil
=> false
Автор: Matt Размещён: 26.09.2011 09:35

0 плюса

Да, в вашем случае вы можете быть уверены, что функция возвращает только true или false. Если бы вы пропустили !! вы бы вернули список ролей

Автор: rainerhahnekamp Размещён: 26.09.2011 09:35

0 плюса

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

!! 3 
=> true

!! nil
 => false 

!! 0
 => true 

В Ruby все, что не ноль или ложь, верно!

В вашем примере кода этот трюк гарантирует, что вы никогда не вернете ничего,
кроме true или false

Если бы вы пропустили !! , вы бы вернули список ролей, или ноль

Автор: Tilo Размещён: 26.09.2011 09:48
Вопросы из категории :
32x32