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, 说明实际是方法,可以被覆盖。

 

后记,因为今天我写长草稿,没有保存住,所以后面写的,会写多少,发布多少。