文明之精神,野蛮之体魄。
全部博文(64)
分类: Python/Ruby
2013-05-09 10:21:58
一、 BEGIN块和END块
BEGIN块总是在程序主体前执行,而END块总是在程序主体之后执行。且多个BEGIN块以它们出现的顺序执行,多个END块以它们出现的相反顺序执行。
二、 分支结构
为了让程序具有更严格的语法检查,我们应该总是在if条件后增加then关键字,从而保证源代码有更严格的语法检查。if表达式的返回值取决于条件成立的部分,条件成立的部分的最后一行代码就是该表达式的结果。
1. if修饰句:使用if修饰句时我们把if表达式放在整个表达式的右边,只有当if后边的条件成立时,才计算左边的表达式,并返回结果。格式如下:表达式 if 表达式。
3.unless语句:与if语句相反,当条件表达式返回结果为假时,才计算then后面的表达式
2. case表达式:根据一系列的枚举条件来进行分支结构控制。必须指出的是,当Ruby拿case后的表达式与when后表达式进行匹配时,使用的是“===”比较符。我们可以在when表达式列表的最后一个表达式前增加(*),一旦该表达式前增加(*),则该表达式被当做数组展开。
三、 循环结构
1. while表达式:通常而言,while表达式没有返回值,除非使用break中止循环。使用break可以跳出循环,如果使用break跳出循环时紧跟了一个参数,则while循环的返回值为该参数。
2. while修饰句:把while和对应条件表达式放在整个表达式的右边,只要右边表达式为真,就循环执行左边部分。格式如下:
表达式0 while 表达式1。。。只要表达式1为真,则表达式0就会重复执行。
3. unitl表达式:只要until关键字后表达式的值为false,Ruby将循环执行until条件后的循环体。通常,until循环没有返回值,除非使用break中止循环。
4. for…in表达式:主要用于迭代数组,Hash对象中的元素。语法如下:
for ele … in 表达式0 【do】
表达式…
end。。。。。。。。。。。。。。ruby解释器先计算表达式0,得到该表达式的值,然后分别针对表达式值中的每个元素,循环执行for循环体的代码。使用for….in可以一次定义多个循环变量。。。。。。必须指出,使用for。。。in迭代时,每次只能取一个数组元素进行循环。
5. loop表达式:当使用loop进行循环时,它对指定的代码块执行无限次的循环,除非显示使用break跳出循环。
6. 使用迭代器:Ruby允许我们直接为任意对象定义自己的迭代器。
四、 控制循环结构
1. 使用break结束循环:break只能中止break关键字所在的循环。
2. 使用next结束本次循环:next并未跳出循环,只是中止本次循环。
3. 使用redo重新开始循环:next开始下次循环时,先检查循环条件是否成立,只有当循环条件成立时,才开始下次循环;redo却不再检查循环条件,直接开始下次循环。
4. 使用retry重启迭代器:可以在迭代、块或for…in表达式中使用retry,使用retry的结果是开始全新的迭代,因此,迭代器的参数也被重新初始化。
5. 使用return结束方法。
五、 深入迭代器和块
所谓迭代器就是一个能接收代码块作为参数的方法。Ruby里的块使用{…}和do…end抱起来即可。
1. 使用块:当我们定义一个代码块之后,就可以使用一个方法来调用代码块。在方法中调用代码块使用yield关键字,每调用一个yield就可以完成一次对代码块的调用。
2.实际上迭代器的功能就是一种回调。迭代器方法所属的类只负责遍历需要遍历的元素,而对元素所做的处理则通过回调代码块来实现。Ruby中的容器对象都包含两个简单的迭代器,分别是each和collect。
3.块和闭包:我们可以把传入的代码块保存起来,而不是立即使用。因此必须给该代码块参数指定一个形参名,给代码块指定形参名时应该在形参名前增加“&”符号。所谓闭包,就是当一个方法返回时,该方法还没有释放资源的栈区。在Ruby里,如果方法返回代码块,而该代码块获得了局部变量的引用,则这些局部变量将在方法返回后仍然可以访问。