Answers:
它们几乎是同义词,但不完全相同。不同的是,!
具有比更高的优先级not
,就像&&
和||
比更高的优先级的and
和or
。
!
在所有运算符中具有最高的优先级,在所有运算符中具有最低的优先级not
之一,您可以在Ruby docs上找到完整表。
例如,请考虑:
!true && false
=> false
not true && false
=> true
在第一个示例中,!
具有最高的优先级,因此您实际上是在说false && false
。
在第二个示例中,not
的优先级低于true && false
,因此这将“ false
从”切换true && false
到true
。
!
除非您有特定的使用理由,否则通常应该遵循的准则是not
。!
Ruby中的Ruby行为与大多数其他语言相同,并且没有令人惊讶not
。
unless
在这种情况下可以使用吗?
unless
在红宝石世界中并不是很受青睐。普遍的共识是,!
在大多数情况下,它在正常工作时会受到阻碍。我敢肯定,在某些情况下,除非可能更具表现力,否则我会明确指出。
unless
点。我们必须达成共识的最接近的说法是相反。
not
。在Python中,有时会为变量分配布尔值,以使if语句更易于阅读。这可能意味着使用模式x = not y
,其中y有点复杂。在Ruby中,x = !y
可以使用,但是x = not y
可以获取syntax error, unexpected tIDENTIFIER, expecting '('
。优先顺序意味着这需要在作业op的右边加上括号:x = (not y)
。