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

时间:2014-12-11 18:16:16

标签: ruby boolean-logic

我记得曾在某处对not!进行了不同的评估,但我无法在文档中找到它。他们是同义词吗?

3 个答案:

答案 0 :(得分:103)

它们几乎是同义词,但并不完全相同。区别在于!的优先级高于not,与&&||的优先级高于andor

!具有所有运算符的最高优先级,而not是最低运算符之一,您可以找到the full table at the Ruby docs

举个例子,考虑一下:

!true && false
=> false

not true && false
=> true

在第一个示例中,!具有最高优先级,因此您有效地说false && false
在第二个示例中,not的优先级低于true && false,因此"切换"从falsetrue && false的{​​{1}}。

一般准则似乎是您应该坚持true,除非您有特定的理由使用!。 Ruby中的not与大多数其他语言的行为相同,并且“不那么令人惊讶”#34;比!

答案 1 :(得分:6)

了解not运算符的简便方法是将not true && false视为等同于!(true && false)

答案 2 :(得分:1)

我有一个 RSpec 驱动的示例Ruby's not keyword is not not but ! (not)

本质上:

  • 它们的优先级不同
  • 它们不是别名
  • ! 可以被覆盖,而 not 不能被覆盖
  • 当您覆盖 ! 时,not 也将被覆盖,因此它必须在幕后使用 !
相关问题