ruby note

1. Ruby是一个解释型语言。
2. 记住在Ruby中,解决一个问题会有多种方法
3. 所有的ruby源程序都以.rb做扩展名。
4. ruby程序的执行是从上到下一行行顺序执行的。
5. 特性:格式灵活, 大小写敏感;

6.两种注释方式, 单行注释以“#”开头,多行注释包括在“=begin”和“=end”中;

7.语句分行符, 多行语句写在同一行时,必须用分号隔开,行末尾可以不写,换行符相当于分号。单行语句要书写到多行时,要使用“\”作为结尾

8. 38个关键字。只有保留关键字false和nil代表false,其他都是true。
9. puts (s代表string; puts 意思是输出字符串) 输出它后面内容到控制台,并且自动换行。
10. 方法调用中的括号是可选的。下面的方法调用都是合法的: foobar foobar() foobar(a, b, c) foobar a, b, c
11. 在Ruby中, 带小数点的数叫浮点数或实数,不带小数点的叫整数。
12. 常用的操作符,+-×/
13. 没有++和–运算符
14. 括号中的表达式优先运算。
15. 当你用整数运算时,结果也是整数类型的。
16. 字符串是包括在单引号或双引号中间的字符组合。
17. 在Ruby中, 字符串是变长的,可以按需扩展,这样做不会耗费太多时间和内存。
18. 使用+可以把两个字符串连在一起。
19 “\” 是转义字符,比如: \”, \\, \n
20”是一个空字符串.
21如果得到一个编译错误- # ,意思是你不能把一个整数加到字符串中,或者不能用一个字符串乘另一个字符串。
22常量以大写字母开头。
23 变量不会预留地址和空间,只有读到变量定义后才会定义变量。给变量初始化为nil是一个好习惯。
24 x, y = y, x会得到y的值,y会得到nil;变量和值的数目要对应。值的数目少了,用nil补;如果多了,丢弃。
25 本地变量要以小写字母或者下划线开头,包含并且只能包含字母,数字和下划线。
26 .to_i, .to_f, .to_s 用来转换成integer, float, string。
27 操作符 << 用来append字符串。 1. 尽量少使用全局变量,因为全局变量能在整个应用程序运行期生存,占用资源。全局变量以‘$’开头。Ruby解释器在开始运行时,能自动初始化一定数目的内建全局变量。 2. gets和chomp方法用来接收和处理用户输入。 3. gets方法返回用户输入的字符串,并加上一个换行符, chomp方法删除字符串中的换行符。 4. STDOUT是一个全局常量,代表的是标准输出流。flush方法能把缓存在io中的数据释放出来。 5. 内置的format方法能够格式化数据,比如format(“%.2f”,x) 。 6. 在Ruby中,可以给常量,变量,方法,类,模块命名,并且可以通过名称的第一个字符确定是什么名称。 7. 小写字母指的是从‘a’到‘z’,下划线是‘_’,大写字母指的是从‘A’到‘Z’,数字指的是从‘0’到‘9’,这些都是合法字符。 8. 名称以小写字母或者大写字母或者下划线开头,后面可以跟大小写字母,数字以及下划线的任意组合。 9. 在ruby程序中,不需要给变量做任何声明(类型,作用域)。通过变量名可以区分出变量的作用域。 10. 谨记本地变量,实例变量,类和模块,全局变量,常量,以及方法的命名规则。 11. “?” 和”!” 是唯一的可以跟在方法名后面的不合法字符。 12. ruby规范说明,如果方法或变量名由多个词组成,词和词之间用“_”隔开。如果是类,模块或者常量,不使用‘_’,只需要把单词的首字母大写就可以了。比如,my_variable, MyModule, MyClass, MyConstant. 13. 变量可以引用任何类型的对象,并且同一个变量可以在不同时刻引用不同类型的对象。 14. ruby中的变量都是对象的引用,变量生效后,ruby会自动做垃圾收集。 15. ruby是动态类型的语言,你所操作的都是对象,返回的结果也是对象。 16. ruby中的基本类型有Numeric(包括Fixnum, Integer和Float子类型), String, Array, Hash, Object, Symbol, Range和RegEx。 17. 通过self方法可以查看在哪个对象中。 18. 使用def和end来声明方法。参数是扩在括号里的本地变量。 19. 方法不需要声明返回类型,返回的是最后一行的值。 20. 最好在不同的方法声明间加一行空行。 21. ruby规范说明要把参数扩在括号中。 22. 方法名后面唯一可以跟的非合法字符就是’!'和’?'。 23. 以’!'结尾的方法总是返回对象本身,而不是一个拷贝。 24. 可以使用’='给参数指定默认值,如果调用方法时,没有传参数值,会使用默认值。 25. #{…}返回的是括号中的表达式的结果。 26. 方法的别名能给方法生成一个拷贝,所以即使原方法发生变化,别名不会跟着变化。 27. 方法的参数个数可以是变化的。 28. 方法的参数个数没有限制。 29. 参数的排列顺序是从左到右。 1. method_missing提供了一个友好的办法,处理找不到方法这种情况,代替了返回一个异常。 2. 查找文档能得到详细的有关string的方法。 3. 双引号括起来的字符串处理过程要复杂一些。它会处理转义字符和#{expression}中的表达式。 4. 记住那些能列出类和对象的所有方法的方法。 5. == 或者eql?比较的是两个字符串的内容,equal?比较两个字符串是否同一个对象。 6. %w可以用来简化数组的初始化。 7. 熟悉常用控制语句:if else end, while, if elsif end 8. 另一个条件语句:unless end 9. 多分支选择语句:case when else end。 10. 数组是按顺序排列的对象,数组元素可以是同一类型,也可以是不同类型。定义数组使用方括号。 11. 数组的索引都是整数,并且以0开始。 12. 数组定义时,如果末尾有逗号,忽略它。 13. 如果访问的数组元素越界,会返回nil。 14. 可以动态的给数组添加元素。 15. 查找相关文档获得更多数组信息。 16. each方法能遍历数组中的所有元素,并且可以操作这些元素。 17. 包含在’||’中的变量名称是任意的,代表的是数组中的每个元素。 18. 遍历数组中的每一个元素时,都会运行do end程序块。 1. 使用’..’和’…’能生成范围对象,并且可以对范围内的元素进行操作。 2. 两个点生成的范围对象包括终点,三个点生成的范围对象不包括终点。 3. 1..100000就是一个范围对象的例子。 4. .to_a方法能把范围对象转换成数组。 5. 范围对象使用最多的就是判断某个值是否在某个范围内,使用’===’操作符。 6. 范围的元素并不局限于数值,也可以是ruby对象。 7. IMPORTANT:Block是括在大括号或者do-end中间的一组程序语句,和方法关联。 8. Block的定义跟在方法名后面,如果方法带参数,那么Block的位置还要后移,要跟在最后一个参数后面。Block包含了一组程序语句,在定义时这些语句并不会执行,只有在方法中才能触发这些语句的执行。 9. 当Block中包含单行语句时,使用大括号;如果包含多行语句,就要使用do-end。大括号的优先级比do-end要高。 10. 在和Block关联的方法内,调用yield关键字会触发Block的执行,并且调用几次就会触发几次。 11. yield可以传参数给Block,Block会接受这些参数并进行处理。接受的方式是使用”||”。 12. Block不是对象,但是可以通过ruby内核的内置方法lambda把它转化成一个proc对象。 13. 记住,不能把方法作为参数传给另一个方法,也不能把方法作为返回值。但是可以把Proc作为一个参数传给方法,或者从方法返回一个Proc类型的对象。 14. Ruby中可以使用rand方法获得随机数。 15. 默认情况下,rand方法得到一个大于或等于0.0,小于1.0的浮点数。如果给rand带一个整数的参数,比如rand(5),就会得到一个大于或等于0小于5的随机整数。 16. File.open方法的几种读写模式:1.’r', read-only,只读模式,从文件头开始; 2.’r+’,read/write,读写模式,从文件头开始; 3.’w',write-only,只写模式,覆盖原来文件或创建一个新文件。 17. File.open后面跟的Block是对文件的操作,Block是可选的。如果不跟Block,File.open会打开一个新文件。如果跟了Block,文件会被作为参数传给Block进行处理,并且Block结束后,文件会被自动关闭。 18. 注意:文件操作结束后,要Close文件,以防文件读写错误。 19. seek也是IO类的方法,它会按着第二个参数的方法,从第一个参数给定的位置开始查找。 IO::SEEK_CUR – 从当前位置加上第一个参数的位置开始(第一个参数是相对位置)。 IO::SEEK_END – 从文件尾开始反向读取,位置是第一个参数的绝对值。IO::SEEK_SET – 从第一个参数给定的位置开始(绝对位置)。 1. 对象是包含了一系列属性和行为的实体。对象的属性用变量表示;对象的功能(可以采取的行为或动作)用方法表示。 2. 实例变量(属性)代表的是对象的状态。 3. 方法用来改变对象的状态。 4. 类是由实例变量和方法组成的。 5. 类用来构造对象。类是对象的蓝本。 6. Ruby中有超过30个的内置类。类的继承关系请见class hierarchy。 7. 在Ruby中,不管是整数还是字符串,任何事物都是对象。并且这些对象内置了一系列方法。如果想调用方法,只要在对象后加一个”.”,然后跟上方法名就可 以了,比如,object.method。有时候,有些方法可以用在任何地方,比如puts和gets,不用加对象名,直接用就可以了。这些方法已经内置 在ruby的内核模块里,所有的对象都已经默认继承了这些方法,所以可以直接用。当运行一个ruby程序的时候,一个叫main的对象被创建,它属于 object类,是程序的入口。 8. 表示整数的类是Fixnum和Bignum,它们的区别是位长不同。浮点数用Float表示。 9. 类的定义方式为,Name…End。 10. 类在ruby中也是对象,是Class类的对象。 11. 类是对象,是Class类的对象;Object是一个类。好好理解这句话。 12. 当定义一个新类的时候,一个Class类的对象被创建,并被分配给一个常量(也就是类名)。当调用.new创建一个类的对象时,会首先调用 allocate方法给对象分配内存,然后才是调用initialize方法初始化对象。对象的构造和初始化是不同的,但它们都可以被覆盖。初始化要调用 initialize方法;构造是在调用new方法时完成的,所有说initialize不是构造器函数。 13. 对象是在堆里创建的。 14. d = Dog.new(‘Labrador’, ‘Benzy’)。d只是对象的引用,并不是对象本身。 15. 哪怕是刚创建的一个新对象,它也已经继承了一些方法,使用methods方法可以查看这些方法。其中object_id和respond_to?方法是比较重要的两个。 16. 在ruby中,每一个对象都会有一个唯一的id,使用object_id方法可以查看这个id。 17. 使用respond_to?方法能够判断调用的方法是否存在。 18. Object.class方法来判断当前的对象来自哪个类。 19. instance_of?方法能够判断对象是否是某个类的实例。 20. Literal Constructors的意思是,可以用某些特殊的写法来代替new方法创建新对象。 21. Ruby中的对象堆分配了最少8兆的内存空间。ruby的垃圾回收属于“标记-清除”型。“标记”的过程会检查对象是否仍在使用中。如果对象仍然被某个变量引用,那么它会被打上一个“保留”的标志。如果对象没有被任何变量引用,它不会被打上“保留”标志。 清除过程只会对没有“保留”标志的对象进行垃圾回收。 22. 变量是对对象的引用,它不是对象本身,也没有类型。 23. load方法能把文件引入多次。 24. require比较常用,它只引用一次,即使多次调用。 25. require ‘filename’,不带文件扩展名。 26. 在Ruby中,Class是开放的。你总是可以修改现有的类(添加或删除内容),不管是自定义的类还是ruby内置的类。并且,这种修改甚至可以不在该类的定义文件中。 27. 继承的好处是,子类可以继承父类的属性和方法,不需要重新定义,只要加上自己特有的特性就可以了。

Tell others about me!

Leave a Reply

Your email address will not be published. Required fields are marked *