我想知道为什么红宝石and
,or
优先级低于&&
,||
,并且赋值运算符?有什么理由吗?在Ruby中,“和”,“或”运算符有什么智慧吗?
10
A
回答
15
我的猜测是这是Perl的直接结转。操作符or
和and
稍后在Perl 5中添加,对于特定情况,希望优先级较低。
例如,在Perl,在这里我们希望||
有较低的优先级,这样,我们可以这样写:
try to perform big long hairy complicated action || die ;
,并确保||
是不会吞噬的行动的一部分。 Perl 5引入了or
,具有低优先级的||
的新版本,正是为了这个目的。
在Ruby中的一个例子,你可以使用or
但不||
:
value = possibly_false or raise "foo"
如果使用||
,这将是一个语法错误。
4
能够控制操作符的优先级有时很有用,特别是如果您关心可读性 - 条件语句中的额外括号有时可能会掩盖实际的逻辑。坦率地说,我认为Ruby具有布尔运算符优先级的原因主要来自Matz在写Ruby之前是Perl程序员的事实,并且从核心语法和运算符中借用了大量的核心语法和运算符那种语言。
+0
嗯,这就解释了为什么红宝石是如此不成熟,同时臃肿。仍然很难包围我的头.. – akostadinov 2014-06-03 16:37:45
5
它们的优先级非常低,所以操作数不必包含在圆括号中,有时与&&
和||
的情况一样。
2
我相信这个想法是专门让他们在赋值运算符之下,所以你可以编写逻辑测试但没有parens。
7
区别是优先。 ||
,&&
的优先级高于=
,但and
,or
的优先级较低。因此,尽管你可以这样做:
a = nil || 0
你必须做的:
a = (nil or 0)
得到同样的效果。如果你这样做:
a = nil or 0
表达式的结果仍然是0,但值将为零。
相关问题
- 1. 运算符|| =在Ruby中代表什么?
- 2. Ruby为什么没有!==运算符?
- 3. PHP中的“和”和“&&”运算符有什么区别吗?
- 4. Ruby中的“=〜”运算符是什么?
- 5. SQL中的IN运算符和=运算符有什么区别?
- 6. #和##运算符在C中做什么?
- 7. 比较运算符和逻辑运算符有什么区别?
- 8. 运算符>>和运算符>>>在java中有什么区别?
- 9. Ruby中的一元加运算符有什么意义?
- 10. 在ORACLE算法中,+或者具有运算符优先级吗?
- 11. Python中为什么不是“和”和“或”运算符?
- 12. %运算符在N%2的Ruby中做什么?
- 13. 是什么?运算符在Ruby中执行
- 14. ruby中的类名之前的符号/运算符是什么?
- 15. ++(或 - )运算符返回什么?
- 16. //和||是什么?运算符在Perl中做什么?
- 17. 运算符>>>在Java和JavaScript中有什么区别?
- 18. 点(。)运算符和 - >在C++中有什么区别?
- 19. 在JavaScript中,运算符'〜'和'!'之间有什么区别?
- 20. 在Solr中,NOT和 - (minus)运算符有什么区别?
- 21. 在php中!=和<>运算符有什么区别?
- 22. 为什么Ada中没有(增强赋值)运算符,如+ =, - =或++?
- 23. 为什么C#中没有|| =或者&& =运算符?
- 24. 圆括号对Python中的'或'运算符有什么影响?
- 25. 有些智慧的Rails迭代
- 26. 在handlebars.js中有三元运算符吗?
- 27. Ruby中的运算符和方法
- 28. 在Ruby(1.9.3)中,为什么nil没有响应比较运算符'<=>`?
- 29. 智慧回形针验证
- 30. 在Ruby中,什么 - 技术上 - array.reject或array.select没有块吗?
是否有一个do_something的成语或死亡的名称?它是否用于红宝石? – 2009-09-17 00:59:00
我不知道它的名字,但它在Ruby中很常见。 – Chuck 2009-09-17 03:08:58
Perl严重依赖死亡,而Ruby使用raise。例外的好处是你可以解救它。 – tadman 2009-09-17 15:20:48