Рубин, !! оператор (a /k /a двойной удар) [дубликаты]

  

Возможный дубликат:
Что делает !! значит в рубине?

Привет,

Я новичок в Ruby и нигде не могу найти описания того, что "!!" средства.

Вот пример:

def signed_in?
  !!current_user
end

Если это двойной минус, почему бы не сказать:

def signed_in?
  current_user
end

Пожалуйста, помогите.

86 голосов | спросил Vitaly 22 +04002010-10-22T09:05:01+04:00312010bEurope/MoscowFri, 22 Oct 2010 09:05:01 +0400 2010, 09:05:01

3 ответа


0

В большинстве языков программирования, включая Ruby, ! возвращает противоположное логическое значение операнда. Поэтому, когда вы объединяете два восклицательных знака вместе, он преобразует значение в логическое значение.

ответил icktoofay 22 +04002010-10-22T09:07:38+04:00312010bEurope/MoscowFri, 22 Oct 2010 09:07:38 +0400 2010, 09:07:38
0

!! - это просто ! ( оператор логического отрицания) записывается дважды. Это отрицает аргумент, затем отрицает отрицание. Это полезно, потому что вы можете использовать его для получения логического значения из любого значения. Первый ! преобразует аргумент в логическое значение, например, true, если это nil или false и false в противном случае. Второе снова отрицает это, так что вы получите логическое значение аргумента, false для nil или false, true для всего остального.

В Ruby вы можете использовать любое значение в выражении if, например. if current_user будет выполняться, если текущий пользователь не является nil. В большинстве случаев это здорово, потому что это спасает нас от набора явных тестов (например, if !current_user.nil?, длина которого как минимум на шесть символов). Но иногда это может сбивать с толку, если вы возвращаете объект, когда метод подразумевает, что он возвращает логическое значение. Методы, чье имя заканчивается на ?, должны возвращать истинные или ложные значения, т.е. они возвращают что-то, что будет оцениваться как true или false. Тем не менее, он может стать очень запутанным, если signed_in? вернул объект пользователя. Например, если вы пытаетесь отладить, почему какой-то код, который использует signed_in?, не работает, вы, вероятно, запутаетесь, когда объект пользователя появляется там, где вы ожидали true или false , В этой ситуации полезно добавить !! перед return, поскольку это гарантировало, что истинное или ложное значение будет возвращено как true или false

ответил Theo 22 +04002010-10-22T09:11:38+04:00312010bEurope/MoscowFri, 22 Oct 2010 09:11:38 +0400 2010, 09:11:38
0

Как вы правильно поняли, это двойное отрицательное использование оператора !. Тем не менее, хотя это может быть краткий способ проверить, может ли переменная быть нулевой или нет, IMO, которая слишком лаконична . Ознакомьтесь с этим и этот пост . Обратите внимание, что в Ruby проверка чего-либо на nil будет иметь значение false.

ответил Zabba 22 +04002010-10-22T09:13:58+04:00312010bEurope/MoscowFri, 22 Oct 2010 09:13:58 +0400 2010, 09:13:58

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132