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的意思是一样的。
相关文档:
Ruport是一个免费的Ruby报表工具,它可以令到制作报表软件变得简单一些。Ruport支持从文件或者数据库获得数据,提供工具操作数据。额外地,Ruport支持高扩展的格式化软件,目前能够支援HTML、PDF、CSV和文本输出。
Ruport可能是Ruby目前唯一的报表工具,目前在持续开发中,更多的新特性正在添加。
安装方法:
gem instal ......
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://zhujg.javaeye.com/blog/355040
首先 安装 cygwin
cygwin 要安装的插件是
默认的+ make + gcc + libiconv
+ openssl
cygwin下需要编译原文件
到ruby-lang(http://ruby-lang.org/)
下载ruby-1.9.1-p0.tar.gz
tar xvf ruby-1.9.1-p0.tar.gz
cd
ruby-1.9.1-p0
./configure
make && make in ......
本例在 Ruby Ruport实践—报表参数实现 的基础上进行改造,实现报表执行定义时报表参数的增、删、改操作
一、修改views/report_executions/edit.html.erb
不仅显示在新建报表执行时保存的报表参数,还可动态显示剩余的参数(这里控制参数最多可定义5个),这样可避免遗忘定义报表参数或需要增加报表参数� ......