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)。