Ruby 简明教程 Part 2

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, this

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, code

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
并行赋值,也能够用于数据交换:ip

a, b = b, c字符串


3.4.5 Ruby Bitwise Operators 位操做符


位操做符,按位操做。it

假设 a = 60; b = 13;io

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

 

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