ruby迭代器基础
“循环”会用在程序中的各种地方。而在循环的地方善用“迭代器”,则是熟练进行Ruby程序设计的重要关键。
不过,迭代器确实有比较抽象的地方,语法也有点怪异(尤其是yield的用法),光是依靠文字说明、看一两个示例,还是不太好懂。其实,当初笔者开始学习Ruby时就卡在这里,很久都搞不懂。
所以在本章中,将通过很多的示例,来慢慢探索Ruby的迭代器。
20.1 迭代器与区块调用
首先来整理一下用词和术语。在Ruby中说到“迭代器”,通常可能有两种意义。
所谓的“迭代器”,本来是指在反复(iterate)的处理中,用来控制反复方式这个“功能”。而在Ruby语言里,迭代器也表示实现这个功能的方法,或者这种方法的接口。
然而Ruby的迭代器接口,有时候又被用在循环以外的地方,例如,让使用者自定义方法一部分的功能,这个用途已经很难称作是迭代器了。
名称与功能不一致,是导致容易搞混的原因。所以又有人称这些使用迭代器的语法但内容并没有进行反复处理的东西叫做“区块”或“代码区块”。但是这又很容易与while等语句的do~end部分那种程序语言规范上的区块搞混,因此这种用词还是不太好。
所以在这一章中,无论是不是迭代器,凡是“迭代器”的语法接口,都称为“区块调用”。在这里希望读者注意的是,说“迭代器”的时候,表示一定与反复处理有关;而说“区块调用”的时候,就可能不一定与反复处理有关系了。
20.2 迭代器的基础知识
迭代器是抽象化的“反复处理”。但抽象思考毕竟不容易,所以让我们从比较具体的反复处理来思考吧。请看程序20.1。
程序20.1 print_times.rb
5.times {
print "<br>\n"
}
这与单纯调用5次print方法意思是一样的。也就是说,一样的程序可以写成程序20.2这样。
程序20.2 print_no_times.rb
print "<br>\n"
print "<br>\n"
print "<br>\n"
print "<br>\n"
print "<br>\n"
当然,说是“反复处理”,也不尽然是一模一样的动作。
请看下面的示例(程序20.3),用来计算数值1到5的和。
程序20.3 sum_each.rb
sum = 0
(1..5).each{|i|
sum += i
}
print "合计: ",sum,"\n"
> ruby sum_each.rb
合计: 15
这与下面的程序20.4的意思是一样的。
相关文档:
Bignum
+ 加
- 减
* 乘
/ 除
** 指数操作2**2 意思是2的平方
<=> 大于, ......
ruby中单引号和双引号的意义有所不同,双引号包围的字符作变量替换,单引号包围的变量不做替换
也可以使用 %q 和 %Q 来生成字符串对象。%q 相当于单引号,%Q相当于双引号。
举例如下:
irb(main):010:0> "show trsult: #{1*3}"
=> "show trsult: 3"
irb(main):011:0> 'show trsult: #{1*3}'
=> "show trs ......
本文转自:
http://hi.baidu.com/24xinhui/blog/item/9f52dd34382e11325ab5f553.html
ruby-语法
2009年06月20日 星期六 上午 00:21
http://www.blogjava.net/xxllnnn/archive/2009/01/18/251762.html
http://www.cnblogs.com/cnblogsfans/archive/2009/01/24/1380804.html
__setobj__ (2009-7-14)
&nbs ......
转自51testing.com, 原见:http://bbs.51testing.com/thread-171535-1-1.html http://swik.net/Watir+Programming
http://www.pragprog.com/ #很多好的源码哦
http://docs.rubygems.org/ #rubygems
http://www.fxruby.org/ #fxruby
http://groups.google.com/group/watir-general/topics #goog ......
Ruport目前自带支持PDF,HTML,CSV,TXT格式输出,如果想打印.xml,.bat报表怎么办?
本例将以XML格式为例,实现Ruport::Formatter的另一种自定义应用。
Ruport的应用参考: Ruby Ruport实践—简单报表系统
注:其他格式的报表只需要修改renders对应的内容(如希望保存为.bat格式,将renders :xml改为renders :bat), ......