提问人:kingsfoil 提问时间:12/12/2014 最后编辑:rlandsterkingsfoil 更新时间:3/3/2022 访问量:91928
ruby 中 “not” 和 “!” 的区别
Difference between "not" and "!" in ruby
答:
198赞
Brennan
12/12/2014
#1
它们几乎是同义词,但不完全是。区别在于 的优先级高于 ,与 非常相似,并且比 和 的优先级更高。!
not
&&
||
and
or
!
在所有运算符中具有最高的优先级,也是最低的运算符之一,您可以在 Ruby 文档中找到完整的表。not
例如,请考虑:
!true && false
=> false
not true && false
=> true
在第一个示例中,具有最高的优先级,因此您实际上是在说 .
在第二个示例中,优先级低于 ,因此将 from “切换”为 。!
false && false
not
true && false
false
true && false
true
一般的准则似乎是你应该坚持,除非你有特定的理由使用。 在 Ruby 中,它的行为与大多数其他语言相同,并且比 “不那么令人惊讶”。!
not
!
not
评论
8赞
jaydel
7/12/2016
我过去曾使用“not”来使否定条件更易于阅读。意思是,如果整个条件都应该被否定,我觉得使用“not”而不是“!”很舒服。当我的代码读起来像 inglush 时,我喜欢它
0赞
Jacob
11/24/2017
@jaydel 在这种情况下,你能用吗?unless
1赞
Brennan
11/28/2017
@Jacob,是的,当然。 只是在 Ruby 世界中并不真正受到青睐。普遍的共识是,在大多数情况下,当工作同样顺利时,它只会妨碍。我敢肯定,在某些情况下,除非可能更具表现力,但我避开了。unless
!
2赞
S. Kirby
10/5/2018
只是想分享一个例子,说明它是多么令人惊讶。在 Python 中,我有时会为变量分配布尔值,以使 if 语句更易于阅读。这可能意味着使用模式,其中 y 是复杂的东西。在 Ruby 中,有效,但得到 .优先顺序意味着这需要在赋值操作的权限周围加上括号才能工作:。not
x = not y
x = !y
x = not y
syntax error, unexpected tIDENTIFIER, expecting '('
x = (not y)
19赞
roniegh
3/17/2018
#2
理解运算符的一个简单方法是将not
not true && false
!(true && false)
1赞
Rich Steinmetz
2/21/2021
#3
我这里有一个 RSpec 驱动的示例:Ruby 的 not 关键字不是不是而是!(不是)
基本上:
- 它们的优先级不同
- 它们不是别名
!
可以被覆盖,而不能被覆盖not
- 当您覆盖时,也会被覆盖,因此它必须在引擎盖下使用
!
not
!
上一个:翻转布尔值的最简单方法?
评论