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, 

OperatorDescriptionExample
+        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, 

OperatorDescriptionExample
=简单赋值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

OperatorDescriptionExample
& 二进制  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逻辑 NOTnot(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 操作符优先级
 

优先级从高到低如下:

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

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值