mop*_*oke 227
这是运营商优先权的问题.
||优先级高于or.
因此,在两者之间你有其他运算符,包括ternary(? :)和assignment(=),所以你选择哪一个可以影响语句的结果.
这是一个ruby运算符优先级表.
有关使用/的其他示例,请参阅此问题.and&&
另外,要注意可能发生的一些令人讨厌的事情:
a = false || true #=> true
a #=> true
a = false or true #=> true
a #=> false
Run Code Online (Sandbox Code Playgroud)
无论是之前的两个语句的计算结果为true,但第二组a到false由于=优先级低于||比,但高or.
Jör*_*tag 76
正如其他人已经解释过的那样,唯一的区别就是优先权.但是,我想指出两者之间实际上存在两个差异:
and,or并not有很多低于优先级&&,||并!and并且or有相同的优先级,同时&&具有较高的比优先级||在一般情况下,它是很好的风格,以避免使用and,or并not与使用&&,||以及!代替.(例如,Rails核心开发人员拒绝使用关键字表单而不是运算符表单的补丁.)
它们存在的原因不是布尔公式,而是控制流.他们做了他们的方式进入红宝石通过Perl的著名do_this or do_that成语,其中do_this回报false或nil是否有错误,然后才进行do_that,而不是执行.(类似地,也有do_this and then_do_that成语.)
例子:
download_file_via_fast_connection or download_via_slow_connection
download_latest_currency_rates and store_them_in_the_cache
Run Code Online (Sandbox Code Playgroud)
有时,这可以使控制流程比使用if或更流畅unless.
很容易理解为什么在这种情况下操作符具有"错误的"(即相同的)优先级:它们永远不会在同一个表达式中一起出现.而当他们都出现在一起时,你通常希望他们进行评估只是左到右.
Ead*_*adz 39
和/或用于控制流程.
Ruby不允许将此作为有效语法:
false || raise "Error"
Run Code Online (Sandbox Code Playgroud)
但这是有效的:
false or raise "Error"
Run Code Online (Sandbox Code Playgroud)
您可以使用()进行第一项工作,但使用and正确的方法.
false || (raise "Error")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
94667 次 |
| 最近记录: |