Ruby: Почему делает, 'и не' работают когда '&&! (expr)' не делает?

Я имею если оператор в моем приложении для направляющих. Я должен сделать основное "если верный и! ложный" вид проверки. Выражение определяется как:

ActiveRecord::Base.connection.tables.include? 'settings' && !Settings.setting_is_set?('defaults_set')

Если я поместил это как свое выражение к, если, если не инициирует. Если я выполняю то выражение в консоли, я получаю ложь.

Теперь, если я изменяю выражение для чтения:

ActiveRecord::Base.connection.tables.include? 'settings' and not Settings.setting_is_set?('defaults_set')

Это возвращает true, как это должно, и выполнение, это - блок.

Таким образом, вопрос: Почему 'выражение &&! выражение', не ведущее себя как 'выражение и не выражение'. Это - мое понимание && и! должен соответствовать и и не почти непосредственно.

Что я пропускаю здесь?

5
задан 12 February 2010 в 01:36
поделиться

1 ответ

Это потому, что когда вы используете && , Ruby интерпретирует весь конец строки как один аргумент, передаваемый в , включая . Поместите круглые скобки в «настройки» , и первый оператор будет работать нормально:

ActiveRecord::Base.connection.tables.include? 'settings' && !Settings.setting_is_set?('defaults_set')
# => false

ActiveRecord::Base.connection.tables.include?('settings') && !Settings.setting_is_set?('defaults_set')
# => true

Каким-то образом, когда вы используете , а не , он знает, что вторая часть не является частью того, что сейчас передается на include , и ваш вызов завершается успешно.

6
ответ дан 14 December 2019 в 08:49
поделиться
Другие вопросы по тегам:

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