未初始化的变量:
- 类变量(@@):      
 必须初始化,否则抛出NameError。可以被子类或类的实例所使用。尽量不使用它。
- 实例变量(@):     
 引用未被初始化的实例变量会返回nil。
- 全局变量($):      
 引用未被初始化的实例变量会返回nil。
- 局部变量(下划线或小写字符开头):      
 通常只能在 一个函数内使用。如果需要变量能在整个类中使用就要把变量设置成实例变量。
 如果未初始化,先去寻找有无这个名字的方法,没有就会抛出NameError。
 一个古怪的行为:
 a = 0.0 if false# 未执行
 print a# 输出 nil
 print b# NameError
常量引用(以大写字母开头,一般都是大写字母并使用下划线分割单词):
- 常量可以是复合表达式,用::将常量名和定义它的类或模块名分隔开,左侧操作数可以省略(将在全局域中查找右侧常数)。
展开操作符:
一个右值以*开头,代表是一个数组(或类似数组的对象):          
x, y, z = 1, *[2,3]        就像 x,y,z = 1,2,3   
左值出现*(只能出现一次*),定义可展开类型可以使用`to_splat`方法。    
x, *y = 1,2,3            输出:x=1;y=[2,3]     
x, *y = 1,2              输出:x=1;y=[2]       
x, *y = 1                输出:x=1;y=[]     
Ruby 1.9 以上    
*x, y = 1,2,3            输出:x=[1,2];y=3        
*x, y = 1,2              输出:x=[1];y=2       
*x, y = 1                输出:x=[]; y=1       
x, y, *z = 1, *[2,3,4]   输出:x=1,y=2;z=[3,4]   
并行赋值中有圆括号的例子:
x,y,z = 1,[2,3]          输出:x=1;y=[2,3];z=nil   
x,(y,z) = 1,[2,3]        输出:x=1;y=2;z=3   
a,b,c,d = [1,[2,[3,4]]]          输出:a=1;b=[2,[3,4]];c=nil    
a,(b,(c,d)) = [1,[2,[3,4]]]       输出:a=1;b=2;c=3;d=4   
条件判断
除了 `false` 和 `nil` 外,都是 `true` 。   
ruby特有常用操作符:
**     求幂运算     
<<     添加     
=~     模式匹配(正则)   
<=>    比较(左操作数小返回-1,大返回+1,相等返回0,不可比较返回nil)   
==     测试两个不同对象是否拥有同样的值   
equal?方法   测试两个值是否引用同一对象   
===    条件相等性操作符,一般被case语句隐式使用
..     范围(包括右边的结束值)   
...    范围(不包括右边的结束值)    
defined?    测试变量的定义和类型   
常用关键字:
与if语义相反的是unless 
   与while语意相反的是until 
   if-elsif相当于java的if-else 
   case-when相当于java的switch-case
