一、 Ruby源代码中既可以定义一个方法,也可以定义一个类,还可以直接放置可执行代码,可执行代码还可以直接放在类中定义。Ruby解释器将从程序的第一行可执行代码开始执行。
二、 Ruby区分大小写
三、 Ruby程序的注释
1. 合理的代码注释应该占源代码的1/3左右。
2. 单行注释,Ruby使用#表示注释的开始,除此之外,单行注释也是Ruby代码的文档注释。文档注释就是可以通过rdoc命令提取的注释。提示:当我们在进行Ruby编程时,一定要多查阅系统内建类的API文档,这些API文档才是我们参考的权威资料。
3. 多行注释,=begin行和=end行之间的所有代码。要注意的是=begin和=end必须顶格写,不能缩进。
四、 Ruby中的标识符
1. 以‘$’开头的变量:全局变量
2. 以‘@’开头的变量:实例变量
3. 以‘@@’开头的变量:类变量
4. 以小写字母或者下划线开头的变量:局部变量
5. 以大写字母开头的变量:常量
五、 Ruby的垃圾回收:在Ruby语言中,内存区域的开辟、后续内存的释放和回收都是由Ruby解释器完成的。
六、 常量
1. Ruby是弱类型语言,这意味着定义Ruby变量时无须指定该变量的数据类型。
2. 普通常量:以大写字母(A-Z)开头,Ruby中对已定义的常量进行赋值不会出现错误,只是出现警告。事实上,常量只能在类、模块里定义,决不能在方法里定义。当然,我们也可以在顶层对象中定义常量。
3. 常量的范围:定义常量的类、模块的内部。还可以在该类的子类中访问该常量。
4. 类名和模块名常量:当我们定义一个类或者一个模块时,系统在生成类对象、模块对象的时候,还会将该类对象、模块对象赋值给一个与该类、该模块同名的常数。
七、 变量及变量的作用域
1. 局部变量:以小写字母(a-z)或下划线开头。局部变量不可在内部类和子类中访问。内部类无法访问外部类的局部变量。
2. 全局变量:以“$”开头的变量。
3. 实例变量:以’@’开头的变量。Ruby语言是一门动态语言,因此Ruby的实例变量无须声明,每个实例变量都是在第一次出现时动态加入对象。注意:Ruby语言里的对象完全是动态的,创建对象时该对象没有任何实例变量,直到执行到为实例变量定义时,该对象才动态增加该实例变量。实例变量的访问范围总是private。
4. 通过Moudle里的4个方法attr,attr_reader,attr_writer和attr_accessor来创建实例变量及其对应的访问方法更加简单。除此之外,我们也可以在模块中定义实例变量,其目的是用于将该实例变量混入其他类中。
方法类无法访问类范围的实例变量。如果我们希望暴露类范围的实例变量,可以通过定义一个类方法来暴露它。
5. 类变量:以“@@”开头的变量是类变量。既可以在类定义中定义,也可以在模块中定义,还可以在方法中定义。与实例变量不同的是,类变量必须先定义,然后才可以使用。
也可以在方法中定义类变量,但在方法中定义类变量后,只有当方法被调用之后,该变量才会生效。
类变量的特殊性:一个类、其子类以及它们的实例的同名类变量共享了同一块内存区域。
类变量默认是protected。
八、 基本数据类型
Ruby里的基本数据类型变量也是一个对象,系统有与之对应的类。Ruby是一门弱语言,使用Ruby变量无须声明类型,当为一个变量赋值就是定义了该变量。弱类型语言的一个特征:同一个变量的数据类型可以变化。
1. 数值型:包括整数和浮点数。整数包括Fixnum和Bignum,其中Fixnum可以容纳比一个物理字长少一位的整数,当一个整数超过Fixnum范围时,它会自动转换成Bignum,Bignum类型的范围只能被物理内存限制。
2. 字符串:Ruby允许使用单引号或双引号来创建字符串,但(’ ’)和(“ ”)括起来的字符串并不完全相同。一般而言:单引号括起来的字符串里,只进行最少的替换,而双引号括起来的字符串里,会进行更多的替换。
字符串的%表示法:如果我们希望一个字符串是由多行字符组成,则可以使用“%”表示法。三种形式:%/stuff/、%Q/stuff/、%q/stuff/。。。//为分隔符,可以是斜线、括号等字符。
多行字符串的字面值:Ruby提供一种多行字符串的表示方法,这种语法也被称为Here Document。常用格式如下:
<<标识符
stuff
标识符 :标识符可以是任意的。
必须注意的是:使用“<<标识符“代表一个字符串时,该字符串定义必须紧随其后。”<<标识符“第二行内容就是所代表的的字符串内容。
九、 范围
值1 .. 值2:定义一个从值1到值2的范围,包括值1和值2。
值1 … 值2: 定义一个从值1到值2的范围,包括值1,但不包括值2。Ruby中的范围也是一个对象,是Range类的实例。
Ruby也允许我们使用自定义类的对象来创建Range对象。。但要求自定义对象的类必须实现一个succ方法,以返回下一个值;而且这个对象也必须支持来与其他对象进行比较。
十、 正则表达式
1. 创建正则表达式:可以采用字面值创建,也可以采用创建Regexp类实例的方式来创建正则表达式。此外,还有一种”%表示法”。
十一、 数组:Ruby数组里的数据元素类型可以互不相同,而且数组长度也是可变的。Ruby里的数组是Array类的实例。所以可以通过创建Array的实例来创建数组。
1.数组的%标示方法:Ruby语言可以把一个包含多个空格的字符串转换成数组。Ruby会把空格当成数组分隔符。转换时需要使用“%W{…}“或者”%w{…}“。。Ruby会把字符串中的空格当成数组元素分隔符,如果希望某个数组元素中包含空格,则可以使用反斜杠(\)进行转义。
十二、Hash对象
1. 定义hash对象:定义hash对象不仅要定义该hash对象里包含的元素,还应该定义该元素对应的Key。hash对象由一系列花括号里的key-value对组成,多个key-value对之间以英文逗号隔开,key和value之间由”=>”隔开,最后一个逗号会被忽略。注意:如果为同一索引的元素两次指定元素值,则后面指定的元素值会覆盖前面指定的元素值。
十三、符号对象
通过如下方式产生符号:
:标识符 :变量名 :操作符
每个符号的实例只有一个,一个特定的对象名总是产生相同的符号对象,不论对象名在程序中是如何被使用的。一个符号对象最常用的地方就是用它来代表变量名或者方法名。