随笔分类 -  ruby

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

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

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 阅读(317) 评论(0) 推荐(0)

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

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

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 阅读(1768) 评论(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 阅读(1521) 评论(0) 推荐(0)

Ruby 正则表达式
摘要:正则表达式的内建支持通常只限于脚本语言如Ruby,Perl和awk等,这是一个耻辱:尽管正则表达式很神秘,但它是一个强大的文本处理工具。通过内建而不是通过程序库接口来支持它,有很大的不同。正则表达式只是一种指定字符模式的方法,这个字符模式会在字符串中进行匹配。在Ruby中,通常在斜线之间(/pattern/)编写模式(pattern)来创建正则表达式。同时,Ruby就是Ruby,正则表达式是对象并且可以当作对象来操作。比如,可以使用如下的正则表达式来编写模式,它会匹配包含Perl或Python的字符串。/Perl|Python/前面那个斜线界定了这个模式,模式由要匹配的两个子字符串组成,它们被 阅读全文

posted @ 2012-07-09 22:34 tim_sheng 阅读(549) 评论(0) 推荐(0)

Ruby 控制结构
摘要:Ruby具有所有常见的控制结构,如if语句和while循环。Java、C和Perl 程序员可能会对这些语句的程序体“缺乏花括号”不太适应。Ruby是使用end关键字来表明程序体的结束。if count>10puts "try again"elsif tries==3puts "You lose"elseputs "Enter a number"end同样地,while语句以end结束。while weight 3000puts "Danger, Will Robinson"end用语句修饰符重新编写了同样这个 阅读全文

posted @ 2012-07-09 14:12 tim_sheng 阅读(189) 评论(0) 推荐(0)

Ruby 数组合散列表
摘要:Ruby的数组(arrays)和散列表(hashes)是被索引的收集(indexed collections).两者都存储对象的集合,通过键(key)来访问。数组的键是整数。而散列表支持以任何对象作为它的键。数组和散列表会按需调整大小来保存新的元素。访问数组元素是高效的,但是散列表提供了灵活性。任何具体的数组或散列表可以保存不同类型的对象。使用数组字面量(array literal)--即方括号之间放一组元素--可以创建和初始化新的数组对象。有了数组对象,在方括号之间提供索引便可以访问单个元素,如下例所示,注意Ruby数组的索引从零开始。a=[1,'cat',3.14] #有三 阅读全文

posted @ 2012-07-07 23:09 tim_sheng 阅读(1301) 评论(0) 推荐(0)

Ruby的一些基本知识
摘要:创建字符串对象有多种途径,最常用的可能是使用字符串字面量(literals),即一组单引号或双引号之间的字符序列。这两种形式的区别在于,当构造字面量时,Ruby对字符串所做处理的多少有所不同。Ruby对单引号串处理得很少。除了极少的一些例外。键入到字符串字面量的内容就构成了这个字符串的值。Ruby对双引号字符串有更多的处理。首先,它寻找以反斜线开始的序列,并用二进制值替换它们。其中最常见的是\n,它会被回车换行符替换掉。当一个包含回车换行符的字符串输出时,\n会强制换行。puts "And good night, \nGrandma"输出结果:And good night, 阅读全文

posted @ 2012-07-05 22:41 tim_sheng 阅读(303) 评论(0) 推荐(0)

Ruby是一门面向对象语言
摘要:Ruby 是真正的面向对象语言。您所操作的每件东西都是对象,操作结果本身也是对象。编写面向对象的代码时,通常你得根据真实世界对概念进行建模。在这个过程中,要挖掘出需要在代码中所表达的事物种类。在点唱机系统(jukebox)中,“歌曲”的概念可能就是这么一个种类。在Ruby里,需要定义类(class)来表示实体。类是状态(state,比如歌曲名称)和使用这些状态的方法(method,可能是一个播放歌曲的方法)的组合。一旦建立了这些类,通常要为每个类创建若干个实例(instances)。“对象(object)”这个概念和“类的实体(class instance)”等同互用。在Ruby中,通过调用构 阅读全文

posted @ 2012-07-04 23:06 tim_sheng 阅读(453) 评论(0) 推荐(0)

导航