娃娃鸭学Ruby-24、操作符
操作符
在Ruby语言中,一个操作符是一个标记。
操作数本身是表达式
操作符的元数 指它的操作数的个数
操作符的优先级
多个同样优先级的操作符,求值顺序由操作符的结合性来决定。
结合性 “L" 表示 从左到右进行求值
”R" 表示 从右到左进行求值
"N"表示 不具有结合性
大多数算术操作符都是左结合的。
求幂操作是右结合的。
1)一元+和一元-
一元-比一元+优先级略低
对应方法名:-@ 和 +@
2)求幂操作**
3)算术操作符: + - * / %
String类 + :连接操作
* :字符串重复操作
4)移位和追加操作符:<< 和 >>
(0b1011<<1).to_s(2) # => "10110"
(ob10110>>2).to_s(2) #=>"101"
5)补,并,交操作符:~ ,& ,| 及^
6)比较操作符: <, <=,> ,>= 和<=>
<=>
左操作数小于右操作数 返回 -1
大于 1
相等 0
不能比较 nil
7)相等性操作符:==,!=,=~,!~和===
8)布尔操作符:&&,||,! ,and,or,not
短路式的
9)范围和Flip-Flops: .. 和...
x+1..x*x
x..y
或 Range.new(x,y)
x...y
或Range.new(x,y,true)
flip-flop
(1..10).each{|x| print x if x==3..x==5}
#prints "3"
(1..10).each{|x| printx if x==3..x>=3}
#prints "34"
(1..10).each{|x| print x if x==3..x>=3}
10) 条件操作符: ?:
唯一的三元操作
?:
第一个操作数的值是 false 或nil 执行第三个操作数
"You have #{n} #{n==1 ? 'message' : 'messages'}"
?:优先级相当低
11)赋值操作符
x=y=z=0
x=(y=(z=0))
12) defined? 操作符
测试操作数是否已经被定义过
#compute f(x) ,but only if f and x are both defined
y=f(x) if defined? f(x)
13)语句修饰符
rescue
if
unless
while
until
print x if x
14)非操作符
()
[]
{}
.和::
;、,和=>
:
*,&和<
2011-4-15 15:42 danny