1.简介
2.安装
3.基本语法
4高级进阶
------继续
3.基本语法
3.4 Operators 操作符
Ruby 支持很多操作符。大多数操作符是方法调用。例如a+b 解释为a+(b), 此处+方法是以b为参数的变量引用的对象的方法。
每个操作符(+ - * / % ** & | ^ << >> && ||), t对应的有简短的赋值符 (+= -=等).
3.4.1 Ruby Arithmetic Operators 算术操作符
假设a=10,b=20,
Operator | Description | Example |
+ | Addition − 加法 | a + b 结果 30 |
− | Subtraction −减法 | a - b 结果 -10 |
* | Multiplication −乘法 | a * b 结果 200 |
/ | Division −除法 | b / a 结果 2 |
% | Modulus − 求模,除法求余数 . | b % a 结果 0 |
** | 指数算法,次幂 | a**b 结果 10的20次方 |
3.4.2 Ruby Comparison Operators 比较操作符
假设a=10,b=20,
Operator | 描述(注意,如果操作符不是逻辑运算数,则返回数值,非零等同于true) | 举例 |
== | 相等 | (a == b) 结果 false. |
!= | 不等 | (a != b) 结果 true. |
> | 大于 | (a > b) 结果 not true. |
< | 小于 | (a < b) 结果 true. |
>= | 大于等于 | (a >= b) 结果 not true |
<= | 小于等于 | (a < b) 结果 true. |
<=> | 左边大返回1,相等返回0,右边大返回-1 | (a <=> b) 结果 -1. |
=== | case 语句中使用,测试相等 | ( (1...10) === 5 结果 true. |
.eql? | 类型和数值相等; | 1 == 1.0 结果 true, but 1.eql?(1.0) 结果 false. |
equal? | 对象Id相等,相当于指针比较。不能被覆盖。 | c=a; a==c 结果 true, a.equal?b 结果 false a.equal?c 结果 true |
尝试以下代码,深入理解
class Object
def all_equals(o)
ops = [:==, :===, :eql?, :equal?]
Hash[ops.map(&:to_s).zip(ops.map {|s| send(s, o) })]
end
end
"a".all_equals "a" # => {"=="=>true, "==="=>true, "eql?"=>true, "equal?"=>false}
3.4.3 Ruby Assignment Operators 赋值操作符
假设a=10,b=20,
Operator | Description | Example |
= | 简单赋值 | c = a + b |
+= | 加和赋值 | c += a 等价于 c = c + a |
-= | 减差赋值 | c -= a 等价于 c = c - a |
*= | 乘积赋值 | c *= a 等价于 c = c * a |
/= | 除法赋值 | c /= a 等价于 c = c / a |
%= | 求余数(模)赋值 | c %= a 等价于 c = c % a |
**= | 指数算法赋值 | c **= a 等价于 c = c ** a |
3.4.4 Ruby Parallel Assignment 并行赋值
和Python 类似,以下语句
a = 10
b = 20
c = 30
可以用下面的并行赋值方法:
a, b, c = 10, 20, 30
并行赋值,也可以用于数据交换:
a, b = b, c
3.4.5 Ruby Bitwise Operators 位操作符
位操作符,按位操作。
假设 a = 60; b = 13;
a = 0011 1100
b = 0000 1101
------------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
Operator | Description | Example |
& | 二进制 AND | (a & b) 结果 12,二进制 0000 1100 |
| | 二进制 OR | (a | b) 结果 61, 二进制 0011 1101 |
^ | 二进制 XOR | (a ^ b) 结果 49, 二进制 0011 0001 |
~ | 二进制补位 | (~a ) 结果 -61, 二进制 1100 0011 因为有符号位 |
<< | 二进制左移 | a << 2 结果 240, 二进制 1111 0000 |
>> | 二进制右移 | a >> 2结果 15, 二进制 0000 1111 |
3.4.6 Ruby Logical Operators 逻辑操作符
假设a=10; b=20;
Operator | 描述(当数值参与运算,返回值,用于逻辑判断时,非零等同于true, 0等同于false) | 举例 |
and | 逻辑 and | (a and b) 等同于 true. |
or | 逻辑 or | (a or b) 等同于 true. |
not | 逻辑 NOT | not(a && b) 等同于false. |
&& | 逻辑 && . | (a && b) 等同于 true. |
|| | 逻辑 OR | (a || b) 等同于 true. |
! | 逻辑 NOT | !(a && b) 等同于false. |
3.4.7 Ruby Ternary Operator 三元操作符
格式:
condition? X : Y
和其它语言类似。条件成立则X,否则Y。
3.4.8 Ruby Range Operators 范围操作符
使用 ".." 和 "..." 来定义范围。俩点操作符包含俩端,三点不包括高端值。
(1..10) 包括从1到10
(1...10)包括1到 9.
3.4.9 Ruby defined? Operators
defined? 是一个特殊操作符,来检查后面的表达式是否已经定义。如果已经定义,则返回表达式的字符串,否则返回nil.
例如:
foo = 42
defined? foo # => "local-variable"
defined? $_ # => "global-variable"
defined? bar # => nil (undefined)
3.4.10 Ruby Dot "." and Double Colon "::" Operators
调用模块方法用点(.)操作符,引用常量使用双冒号(::)
如果没有前缀,默认是主模块。
MR_COUNT = 0 # constant defined on main Object class
module Foo
MR_COUNT = 0
::MR_COUNT = 1 # set global count to 1
MR_COUNT = 2 # set local count to 2
end
puts MR_COUNT # this is the global constant
puts Foo::MR_COUNT # this is the local "Foo" constant
3.4.10 Ruby Operators Precedence 操作符优先级
优先级从高到低如下:
ethod | Operator | Description |
Yes | :: | 常量解析符 |
Yes | [ ] [ ]= | 元素引用,元素集合 |
Yes | ** | 指数(次方) |
Yes | ! ~ + - | Not(非), 补位,加,减(这儿加减是单操作符,+@,-@)。 |
Yes | * / % | 乘,除,求余。 |
Yes | + - | 加,减 |
Yes | >> << | 右位移,左位移 |
Yes | & | 位 'AND |
Yes | ^ | | 位 XOR, 正常的OR |
Yes | <= < > >= | 比较操作符 |
Yes | <=> == === != =~ !~ | 相等和模式匹配操作符(~=和 !~ 不能定义方法)。 |
| && | 逻辑 AND |
| || | 逻辑 OR |
| .. ... | 范围(包括,不包括) |
| ? : | 三元操作符,等价于 if-then-else |
| = %= { /= -= += |= &= >>= <<= *= &&= ||= **= | 赋值 |
| defined? | 检查是否定义 |
| not | 逻辑非 |
| or and | 逻辑 or and |
注意:operators 栏目为yes, 说明实际是方法,可以被覆盖。
后记,因为今天我写长草稿,没有保存住,所以后面写的,会写多少,发布多少。