Ruby编程语言

动态语言 完全面向对象

true false nil

0true

双引号中位于分界符 #{} 之间的表达式,将调用其 to\_s 方法转成字符串。

类和模块都是开放的,可在运行时修改和扩展。

如果对象 obj 有一个 x= 的方法, 则 obj.x=(1)obj.x=1

一般省略函数调用的圆括弧,尤其是无参方法。

empty? 方法会测试数据结构是否包含元素。

方法名中含有字符 ! , 表明该方法会修改原对象。

全局变量以 $ 为前缀,实例变量以 @ 为前缀,类变量以 @@ 为前缀。

1..3 #[1,2,3]=, =1...3 #[1,2]

字符串是可变的,[]= 去改变字符串中的字符, << 字符串尾部追加。

ri 是Ruby的文档查看器,后接类名,模块名,方法名,若一个类定义了同名的类方法和实例方法,则用 :: 引用类方法,用 # 引用实例方法。

标识符由字母、数字、和下划线组成,但不能以字母开头。 以26个大写字母开头的标识符为常量。模块名和类名也必须以大写字母开头。 局部变量以下划线或者小写字母开头。

默认将换行符看作是语句的总结符,只有在一行代码中放入多条语句时,才使用分号分割语句。可用 \ 避免自动总结语句。

把相互关联的类及独立于那些类的方法组成模块。

代码块既可以用 {} 界定, 也可以用 doend 界定。

引用一个未被赋值的类变量,会抛出 NameError ; 引用一个未被初始化的实例变量,返回 nil ; 引用一个未被初始化的全局变量,返回 nil

表达式中的 :: 表示常量引用。例, ::ARG (Object::ARGV)

只有在真正被赋值后,常量才存在; 对变量赋值时,即使并未真正执行赋值,变量就存在了。

a[0] # a[](0)
x+y # x.+(y)
o[x,y] = z # o[]=(x,y,z)
o[x] -= 2 # o[]=(x, o.[](x)-2)

在对象外,实例变量是永不可见的,且实例变量名永不会被对象限定修饰。

表达式 x, 既可以是局部变量 x , 也可以是 self 对象的一个方法 x , 为消除此二义性, Ruby将 该标识符当作局部变量来处理,条件是在这之前有变量的复制操作(即使该操作未执行)。

对已存在的常量赋值,只会导致一个警告; 在方法内是不允许对常量赋值的; 因为只有在真正执行了对常量的赋值后, 常量才会存在,故不存在未初始化的常量。

Ruby对属性或数组元素的赋值,其实是对方法调用的简写。

并行赋值

x, y, z = [1, 2, 3] # x, y, z = 1, 2, 3
x, = [1, ] # x=1
x, y, z = 1, 2 # x=1; y=2; z=nil
x, y, z = 1, *[2, 3] # x, y, z = 1, 2, 3
x, *y = 1, 2, 3 # x=1; y=[2, 3]
*x, y = 1, 2, 3 # x=[1,2]; y=3
x, y, *z = 1, *[2, 3, 4] # x=1; y=2; z=[3, 4]
x, (y, z) = 1, [2,3] # x, y, z = 1, 2, 3
a, b, c, d = [1, [2, [3, 4]]] # a=1; b= [2, [3, 4]]; c=d=nil
a, (b, (c, d)) = [1, [2, [3, 4]]] # a=1; b=2; c=3; d=4

类中可以定义各个操作符(但不是全部)的含义,例如, <&+ 等等。 -+ 既可以作为一元操作符, 也可以作为二元操作符。 作为一元操作符时,对应的方法名分别为 -@+@

一个类在定义了 <=> 操作符,并混入了 Comparable 模块后, 就自动有了 <<=>>===

就布尔操作而言, falsenil 都被认为是 false , 其他如 0 、 "" 、 []{} 都被认为是 true

Last Updated 2015-11-15 Sun 15:54.

Created by Howard Hou with Emacs 24.5.1 (Org mode 8.2.10)