2012年7月19日

Ruby 实现迭代器

摘要: Ruby的迭代器只不过是可以调用block的方法而已。Ruby的block不是传统意义上的、将语句组织在一起的一种方式。首先,block在代码中只和方法调用一起出现:block和方法调用的最后一个参数处于同一行,并紧跟在其后(或者参数列表的右括号的后面)。其次,在遇到block的时候并不立刻执行其中的代码。Ruby会记住block出现时的上下文(局部变量、当前对象等)然后执行方法调用。在方法内部,block可以像方法一样被yield语句调用。每执行一次yield,就会调用block中的代码。当block执行结束时,控制返回到紧随yield之后的那条语句。我们来看个简单的例子.def three 阅读全文

posted @ 2012-07-19 23:01 tim_sheng 阅读(720) 评论(0) 推荐(0) 编辑

2012年7月16日

敏捷测试与普通测试的区别

摘要: 1.项目相当于开发与测试并行,项目整体时间较快。 2.模块提交较快,测试时较有压迫感。 3.工作任务划分清晰,工作效率较高。 4.项目规划要合理,不然测试时会出现复测的现象,加大工作量。 5.发现问题需跟紧,项目中人员都比较忙,问题很容易被遗忘。 6.耗时、或较难解决对项目影响不大的问题一般会遗留到下个阶段解决。 7.发现BUG能够很快的解决,对相关的模块的测试影响比较小。 8.版本更换比较勤,影响到测试的速度。 9.要多与开发沟通。 10.要注意版本的更新情况。 11.测试人员几乎要参加整个项目组的所有会议。 阅读全文

posted @ 2012-07-16 14:17 tim_sheng 阅读(443) 评论(0) 推荐(0) 编辑

2012年7月15日

Ruby容器

摘要: 所谓容器是指含有一个或多个对象引用的对象。在开始实现之前,我们需要决定如何在SongList对象中存储歌曲列表。目前有3个明显的选择:(1)使用Ruby的Array(数组);(2)使用Ruby的Hash(散列表);(3)自定义列表结构。数组类含有一组对象引用。每个对象引用占据数组中的一个位置,并由一个非负的整数索引来标识。可以通过使用字面量(literal),或显示地创建Array对象,来创建数组。字面量数组(literal array)只不过是处于方括号中的一组对象。a = [3.14159, "pie", 99]a.class ... 阅读全文

posted @ 2012-07-15 14:58 tim_sheng 阅读(720) 评论(0) 推荐(0) 编辑

Ruby变量

摘要: 每个变量保存一个对象的引用。person = "Tim"person.object_id ->938678person.class ->Stringperson ->"Tim"第一行代码,Ruby使用值“Tim”创建了一个String对象。这个对象的一个引用(reference)被保存在局部变量person中。接下去的快速检查展示了变量具备字符串的特性,它具有对象的ID,类和值。那么,变量是一个对象吗?在Ruby中,答案是“不”,变量只是对象的引用。对象漂浮在某处一个很大的池中(大多数时候是堆,即heap中),并由变量指向它们。pers 阅读全文

posted @ 2012-07-15 14:41 tim_sheng 阅读(398) 评论(0) 推荐(0) 编辑

Ruby 访问控制

摘要: “protected”和“private”之间的区别很微妙,如果方法是保护的,它可以被定义了该方法的类或其子类的实例所调用。如果方法是私有的,它只能在当前对象的上下文中被调用--不可能直接访问其他对象的私有方法,即便它与调用者都属同一个类的对象。Ruby和其他面向对象语言的差异,还体现在另一个重要的方面。访问控制实在程序运行时动态判定的,而非静态判定。只有当代码试图执行受阻的方法,你才会得到一个访问违规。有两种不同的方式定义函数的访问级别首先class MyClass def method1 #default is 'public' #... end protected #su 阅读全文

posted @ 2012-07-15 14:13 tim_sheng 阅读(367) 评论(0) 推荐(0) 编辑

2012年7月14日

Ruby类变量和类方法

摘要: 类变量被类的所有对象所共享,它与类方法相关联,对一个给定的类来说,类变量只存在一份拷贝。类变量由两个@符开头,例如@@count。与全局变量和实例变量不同,类变量在使用之前必须被初始化。通常,初始化就是在类定义中的简单赋值。例如,我们的点唱机可能希望记录每首歌被播放的次数。这个数目可能是Song对象的一个实例变量。当一首歌被播放时,实例中的值增加。但是,假如我们还想要了解下一共播放了多少首歌。通过搜索所有Song对象并累加它们的播放次数,或者冒天下之大不韪使用全局变量来完成统计;或者,让我们使用类变量。class Song @@plays = 0 def initialize(name.art 阅读全文

posted @ 2012-07-14 21:39 tim_sheng 阅读(8200) 评论(0) 推荐(0) 编辑

2012年7月13日

Ruby 可写的属性

摘要: 有些时候,你需要能够在一个对象外部设置它的属性。在类如C++和Java等语言中,你需要用setter方法来完成这个任务。class JavaSong{ //Java代码 private Duration _duration; public void setDuration(Duration newDuration){ _duration = newDuration;}}s = new JavaSong(....);s.setDuration(length);在Ruby中,访问对象属性就像访问变量一样。当你想要设置某个属性的值时,对这些变量直接赋值似乎更自然些。在Ruby中,你可以通过创建一个名 阅读全文

posted @ 2012-07-13 10:32 tim_sheng 阅读(299) 评论(0) 推荐(0) 编辑

2012年7月11日

Ruby 继承和消息

摘要: 继承允许你创建一个类,作为另一个类的精炼(refinement)和特化(specialization)。例如,在我们的自动点唱机系统中,有“歌曲”这一概念,被封装在Song类中,然后,随着市场的成长,我们需要提供卡拉OK的支持。一首卡拉OK歌曲和其他歌曲没什么两样(它只是没有主唱的音轨,对此我们不必关心)。不过,它还包括对于的一套歌词以及时间信息。当我们的自动点唱机在播放一首卡拉OK歌曲时,歌词应该随音乐滚动显示在点唱机前的屏幕上。解决这个问题的一种方法是定义一个新的类KaraokeSong,就是Song加上歌词。class KaraokeSong *Song:My Way--Sinatra. 阅读全文

posted @ 2012-07-11 18:08 tim_sheng 阅读(2147) 评论(0) 推荐(0) 编辑

2012年7月10日

Ruby 读/写文件

摘要: Ruby有一个完备的I/O库(I/O==input/output简称,输入输出端口)。已经碰到过了两个用来输出的方法。puts输出它的参数,并在每个参数后面添加回车换行符。print也输出它的参数,但没有添加回车换行符。它们都可以用来向任何I/O对象进行输出,但在默认情况下,它们输出到标准输出。另外一个常用的输出方法是printf,它在一个格式化字符串的控制下打印出它的参数(就象c或Perl中的printf)。printf("Number:%5.2f,\nString:%s\n",1.23,"hello")输出结果: Number:1.23, Strin 阅读全文

posted @ 2012-07-10 22:17 tim_sheng 阅读(1755) 评论(0) 推荐(0) 编辑

Ruby Block和迭代器

摘要: 我们来简单地描述Ruby的一个独特特性。Block,一种可以和方法调用相关联的代码块,几乎就像参数一样。这是一个不可思议的功能强大的特性。可以用Block实现回调(但它比Java的匿名内部(anonymous inner)类更简单),传递一组代码(但它远比c的函数指针灵活),以及实现迭代器。Block只是在花括号或者do...end之间的一组代码。{puts "Hello"} #this is a blockdo ### club.enroll(person) #and so is this person.socialize #end ###为什么有两种分界符?部分原因是有 阅读全文

posted @ 2012-07-10 14:25 tim_sheng 阅读(1505) 评论(0) 推荐(0) 编辑

导航