时间:2021-05-22
Ruby 是一种表达能力很强的语言,这得意于它异常丰富的运算符和语法糖,虽然 Ruby 一直把最小惊讶原则作为它的哲学之一,但还是常常看到让人惊讶不已,难于理解的代码,这可能是因为对它运算符和语句优先级理解不透导致,今天就和大家聊一聊 Ruby 运算符和语句的优先级。
先看一句简单的代码,猜一猜它的输出是什么。
复制代码 代码如下:
puts {}.class
很多人一定以为结果是 Hash,但实事上结果是空,不信可以在 irb 里试一试。
再看一段代码。
复制代码 代码如下:
puts "5 && 3 is #{5 && 3}"
puts "5 and 3 is #{5 and 3}"
a = 5 && 3
b = 5 and 3
puts "a is #{a}"
puts "b is #{b}"
结果是:
复制代码 代码如下:
5 && 3 is 3
5 and 3 is 3
a is 3
b is 5
有没有觉得奇怪 b 怎么是 5 而不是 3 呢。
如果这两个例子你也觉得奇怪,那说明你对 Ruby 一些运算符和语句的优先级理解还不透彻,判断有误。 puts {}.class 实际上相当于 (puts {}).class -> nil.class 所以输出为空。{}相当于一个空的 block,优先和方法 puts 结合。 && 和 and 的优先是不同的,而且和 = 号的优先级顺序比较, && > = > and,所以 a = 5 && 3 相当于 a = ( 5 && 3),而 b = 5 and 3 相当于 ( b = 5 ) and 3,所以结果 a 和 b的值是不同的。
下面一张表格是 Ruby 中常见的运算符和语句的优先级列表,从上到下优先级递减。
Ruby operators (highest to lowest precedence)
几条便于记忆的原则:
1.关键字类如if and 等的优先级是要比符号类低;
2.赋值符号 = ||= 等优先级也比较低,仅次于关键字类;
3.[] []= 元素引用的优先级非常高。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
运算符优先级JavaScript中的运算符优先级是一套规则。该规则在计算表达式时控制运算符执行的顺序。具有较高优先级的运算符先于较低优先级的运算符执行。例如,乘
JavaScript中的运算符优先级是一套规则。该规则在计算表达式时控制运算符执行的顺序。具有较高优先级的运算符先于较低优先级的运算符执行。例如,乘法的执行先于
运算符的优先级确定了计算复杂表达式时哪个运算优先进行。最基本的运算符优先级就是所谓的“先乘除,后加减”。 JavaScript定义了所有运算符的优先顺序,
一.运算符的优先级在C++Primer一书中,对于运算符的优先级是这样描述的:Precedencespecifieshowtheoperandsaregroup
运算符优先级来确定条件的表达式中的分组。这会影响一个表达式如何计算。某些运算符的优先级高于其他;例如,乘法运算符的优先级比加法运算更高。例如x=7+3*2;这里