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

011*_*112 87 ruby boolean-logic

我记得在那里阅读not!进行了不同的评估,我在文档中找不到它.他们是同义词吗?

Bre*_*nan 121

它们几乎是同义词,但并不完全相同.不同的是,!具有比更高的优先级not,就像&&||比更高的优先级的andor.

!具有所有运算符的最高优先级,并且not最低的一个,您可以在Ruby文档中找到完整的表.

例如,考虑:

!true && false
=> false

not true && false
=> true
Run Code Online (Sandbox Code Playgroud)

在第一个例子中,!具有最高优先级,所以你有效地说false && false.
在第二个例子,not具有比低优先级true && false,所以这种"切换"的falsetrue && falsetrue.

一般准则似乎是你应该坚持!,除非你有特定的理由使用not.!Ruby中的行为与大多数其他语言相同,并且"不那么令人惊讶" not.

  • 我过去使用'not'来使否定条件更容易阅读.意思是如果应该否定整个条件,我觉得使用'not'而不是'!'会很舒服.当我的代码读起来像inglush时,我喜欢它 (4认同)
  • 我不同意“除非”是不利的。[我们必须达成共识的最接近的内容](https://github.com/rubocop-hq/ruby-style-guide#unless-for-negatives)表示相反。 (3认同)
  • 只是想分享一个例子,说明 `not` 是多么令人惊讶。在 Python 中,我有时会为变量分配布尔值以使 if 语句更易于阅读。这可能意味着使用模式 `x = not y`,其中 y 是复杂的东西。在 Ruby 中,`x = !y` 有效,但 `x = not y` 得到 `syntax error,unexpected tIDENTIFIER,expecting '('`。优先顺序意味着这需要在赋值操作的右边加上括号才能工作:` x =(不是 y)`。 (2认同)

小智 9

理解not操作员的简单方法是将其not true && false视为等同于!(true && false)