我记得曾在某处对not
和!
进行了不同的评估,但我无法在文档中找到它。他们是同义词吗?
答案 0 :(得分:103)
它们几乎是同义词,但并不完全相同。区别在于!
的优先级高于not
,与&&
和||
的优先级高于and
和or
。
!
具有所有运算符的最高优先级,而not
是最低运算符之一,您可以找到the full table at the Ruby docs。
举个例子,考虑一下:
!true && false
=> false
not true && false
=> true
在第一个示例中,!
具有最高优先级,因此您有效地说false && false
。
在第二个示例中,not
的优先级低于true && false
,因此"切换"从false
到true && 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
也将被覆盖,因此它必须在幕后使用 !