红宝石中“不”和“ !”的区别

not!是同义词,还是它们的评价不同?

83319 次浏览

它们几乎是同义词,但不完全是。不同之处在于,!的优先级比 not高,很像 &&||的优先级比 andor高。

在所有操作符中,!的优先级最高,而 not的优先级最低,可以找到 Ruby 文档的完整表格

例如:

!true && false
=> false


not true && false
=> true

在第一个示例中,!具有 最高的优先级,因此实际上就是说 false && false
在第二个示例中,not的优先级低于 true && false,因此这将 falsetrue && false“切换”到 true

一般的指导方针似乎是您应该坚持使用 !,除非您有使用 not的特定原因。在 Ruby 中,!的行为与大多数其他语言相同,并且比 not“不那么令人惊讶”。

理解 not操作符的一个简单方法是将 not true && false看作等价于 !(true && false)

我在这里有一个 RSpec 驱动的示例: “ a href =”https://richstone.io/rubys-not-key-is-not-not-but-not/”rel = “ nofollow noReferrer”> Ruby 的 not 关键字 is not but! (not)

实质上:

  • 它们的优先级不同
  • 这不是化名
  • 可以重写 !,而不能重写 not
  • 当你覆盖 !,然后 not也将被覆盖,因此它必须在引擎盖下使用 !