我的Rails应用程序中有一个if语句。我需要做一个基本的“if true and!false”检查。表达式定义为:
ActiveRecord::Base.connection.tables.include? 'settings' && !Settings.setting_is_set?('defaults_set')
如果我把它作为我的表达式给if,if就不会触发。如果我在控制台中运行该表达式,我会得到错误。
现在,如果我将表达式修改为:
ActiveRecord::Base.connection.tables.include? 'settings' and not Settings.setting_is_set?('defaults_set')
它应该返回true,并执行它的阻塞。
所以问题是:为什么'表达&& !表达'不像'表达式而不是表达'。这是我的理解&&而且!应该和,而不是几乎直接对应。
我在这里缺少什么?
答案 0 :(得分:6)
因为当你使用&&
时,Ruby会将字符串的整个末尾解释为传递给include
的单个参数。将括号括在'settings'
周围,第一个语句将正常工作:
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
不知何故,当您使用and not
时,它知道第二部分不是传递给include
的部分,并且您的呼叫成功。
答案 1 :(得分:0)
‘not’
是一个控制运算符,!
是一个逻辑运算符。不同之处在于评估命令时“not”的优先级较低。执行逻辑表达式时使用!
。