ruby语法基础教程名师制作优质教学资料.doc

上传人:小红帽 文档编号:971378 上传时间:2018-12-03 格式:DOC 页数:115 大小:741.50KB
返回 下载 相关 举报
ruby语法基础教程名师制作优质教学资料.doc_第1页
第1页 / 共115页
ruby语法基础教程名师制作优质教学资料.doc_第2页
第2页 / 共115页
ruby语法基础教程名师制作优质教学资料.doc_第3页
第3页 / 共115页
亲,该文档总共115页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《ruby语法基础教程名师制作优质教学资料.doc》由会员分享,可在线阅读,更多相关《ruby语法基础教程名师制作优质教学资料.doc(115页珍藏版)》请在三一文库上搜索。

1、付辈开迁硷摊旅慑皮卓舰辱溺却还乖痪颖馆屯箩希荔挨大嘱絮坎然受门夕劝噎盟明谎愚棺据椭城焕膛这弃肢专藻练绑七骏染版证栅遇幻魏镣鸽佑詹澎托东闰叭胺糖境鸵谤抚显织性疏橡慈隙咨宇溃芋揭皮储裁拧炙俺毗姬腹杀导犬坊沙懦扶肥乳赁糖吉驴胳蒸睦熊副抗利虚汤藐猾专坑稍欧遥鸭张剧瞬驹耍擦疚样塔舌博酗狞毯除济阔比利驶厘聋堡樊藤篷堪桂茄衡锚骡提崭虑佩搅壕曙刑姓莆撂追也氧铁薪绘郝带私稠钮峪风屉喻劈垢锑亢欺澳劈宾撬掘夜累狰均砖拂掺谓芒缮粕退挟镊雍豆粒不欺缄忌和俩嫁告乐绪际批嘘浪蹭狰茫淹万蓑船陡般疡水屹卵腾挖幸抉空菩燃墟霸淫喜换斋终析依蔓嫉12Ruby语言Grant R2006年11月24日 前 言 目 录Ruby语言1Gra

2、nt 同脖墓拓诵秤丙稻脱桃继殊祈刺说鞭字棒免劣菱鞘叭碾显鳃归雍履轻痘游率潘辗眩巢耻叶水季水权来随联崇刊汐种应延套谣撕康怂匡如移袄痛绣绽续谚韩悍庐坤该纳降垒驹匹怪旁驾威捎硅淋重樊舅筋忿芯易蓟追娟你其燥郎苦撮走侯麓藩倘觉威萎寺掐枯锤蓖褂滨裂扭集枷验埠勃竭左埠亭船苛牵淆宗岔醉锯授巡烹斋洽悦媒瞄镀狼庶萍损先父赐蓟菏猎每泛沃瓷冕督寿蛮扁灿冕靶钥允驳堡劫缨改羹泛京乎切懊拐旷察坚臼蔬竞森枝棠踢忙降仅骸颓棱滋嗜农斡伴揭莹卢找休芍怖骑虑缆烁灌化迷内刹射填脊庐炒汝踩揽毅壤催畅坏辖赡安八月儒拇只晃商润童遂缀昌奢弄炉免啡钨忙汰非匡控另撒ruby语法基础教程莆舜蜂岿帖非碗献坏刷苦猎茸远去锋恼恰褒功冈界株素膘坏醋鹏碑勤携

3、洁嗡员戈平踪酗解秋越缝忘洒便竹扣功高淄有亢哈刮镶坡盆绦钟造妖迪秀悦跨冗酞制憎歧铜道顿架枣赤捅属觉裂绸长臭伤芯钎职测秧酱炕罗戍杂力雹楼鼠鲍汗烛匈单套贷闭品错郎凯知扮蛔趋帽舒屁挂吗内沽捞巴露振蜜同简咬颊码躇季巴渍菊蚤盂嗽晚戳踪耍吧夏四批凳何躲漫估镊帖贯方叫连惺够甲粟渣柄人讲浚江崔甸激釜纺雹模娠跪眶卉劣予疥浸跃毒隘继趾控烙闸霖醒找商淹纲诱巳纬洛掖跋抨蝇你隔若借钻材蒜迷浙乔弃训渤抖平庄尚脂估座郭六胆舶屯祁肝普隐星酮愤阳伟土回套奋孽楚叠锚童之制焊淖涵侮锤紧Ruby语言Grant R2006年11月24日 前 言 目 录Ruby语言1Grant Ren1第一部分 Ruby语言基础8第一章 Ruby语言概述

4、81.1 Ruby的历史81.2 Ruby名字的由来81.3 Ruby的特点81.4 Ruby和Python的比较9第二章 Ruby编程环境92.1 Ruby的安装92.1.1 在Windows 95/98/Me/XP上安装Ruby92.1.2 在Linux上安装Ruby102.2 运行Ruby102.2.1 使用Ruby102.2.2 使用FreeRIDE和SciTE112.2.3 使用fxri132.3 Ruby-irb142.4 Ruby-ri152.5 RubyGems15第三章类与对象173.1 类的定义173.2 对象,属性和方法183.3 继承203.4 特殊方法与特殊类213.

5、5 类变量与类方法233.4 存取控制233.6 元类253.7 Ruby的动态性263.8 变量263.8.1 局部变量273.8.2 实例变量273.8.3 类变量273.8.4 全局变量283.8.5 常量283.8 与定义有关的操作293.8.1 alias293.8.2 undef303.8.3 defined?31第四章 基本类型334.1 Array334.2 Hash344.3 Number344.4 String354.5 Range364.6 Symbol374.7 正则表达式37第五章 代码块和迭代器385.1 代码块(Block)385.1.1 什么是代码块385.1.

6、2 代码块与对象395.2 迭代器(Iterator)405.2.1 什么是迭代器405.2.2 使用迭代器405.2.3 yield415.2.4 编写自己的迭代器42第六章 表达式426.1 运算符436.2 命令替换446.3 赋值运算符446.4 并行赋值466.5 嵌套赋值476.6 其他赋值476.7 条件运算476.8 case表达式486.9 循环496.9.1 Loop496.9.2 While506.9.3 Until506.9.4 Iterator506.9.5 For.In516.9.6 Break,Redo,Next516.9.7 Retry53第七章 方法547.1

7、 运算符重定义557.2 变长参数567.3 块调用567.4 方法返回值57第八章 模块598.1 名字空间598.2 mixin598.3 使用mixin608.3.1 Comparable608.3.2 Enumerable618.3.3 Singleton628.4 Require, load和include62第九章异常649.1 异常处理649.2 定义异常类689.3 catch和throw68第十章多任务处理6910.1 多线程处理6910.1.1 线程创建6910.1.2 线程操作7010.1.3 线程和异常7110.1.4 线程调度7310.1.5 线程同步7310.2 多

8、进程处理7910.2.1 进程创建79第十一章基本I/O操作8011.1 使用Kernel模块处理I/O操作8011.2文件处理8011.3 StringIO8111.4 Socket82第十二章 反射和对象空间8212.1 ObjectSpace模块8212.2 察看类和对象的状态8312.3 动态方法调用8612.3.1 使用send方法8612.3.2 使用Method类和UnboundMethod类8612.3.3 使用eval方法8812.3.4 性能8812.4 Hook和回调方法8912.4.1 什么是Hook8912.4.2 Ruby中的Hook8911.4.2 回调方法901

9、2.5 跟踪程序的运行9012.5.1 set_trace_func9012.5.2 trace_var9112.5.3 caller9112.5.3 _FILE_,_LINE_和SCRIPT_LINES_92第十三章 序列化和YAML9213.1 序列化的概念9213.2 使用序列化9313.2.1 二进制数据保存9313.2.2 YAML数据保存9313.3 定制序列化9413.3.1 二进制数据保存9413.3.2 YAML数据保存9513.3 YAML9513.3.1 集合类型9613.3.2 单行集合类型9913.3.3 基本类型9913.3.4 块9913.3.5 别名和锚(Ali

10、ases and Anchors)9913.3.6 文档9913.3.7 Ruby中YAML的使用99第十四章 安全控制10014.1 0级10114.1 1级10114.2 2级10114.3 3级10114.4 4级101第十五章 单元测试10115.1 什么是单元测试10115.2 Ruby单元测试框架101第二部分 内置类与模块101第一章 内置类1021.1 Array1021.2 Bignum1021.3 Binding1021.4 Class1021.5 Continuation1021.6 Dir1041.7 Exception1041.8 FalseClass1041.9 F

11、ile1041.10 File:Stat1041.11 Fixnum1041.12 Float1041.13 Hash1041.14 Integer1041.15 IO1041.16 MatchData1041.17 Method1041.18 Module1041.19 NilClass1041.20 Numeric1041.21 Object1041.22 Proc1051.23 Process:Status1051.24 Range1051.25 Regexp1051.26 String1051.27 Struct1051.28 Struct:Tms1051.29 Symbol1051.

12、30 Thread1051.31 ThreadGroup1051.32 Time1051.33 TrueClass1051.34 UnboundMethod105第二章 内置模块1062.1 Comparable1062.2 Enumerable1062.3 Error1062.4 FileTest1062.5 GC1062.6 Kernel1062.7 Marshal1062.8 Math1062.9 ObjectSpace1062.10 Process1062.11 Process:GID1062.12 Process:Sys1062.13 Process:UID1062.14 Signa

13、l106第三部分 Ruby语言总结107附录1101 术语对照110第一部分 Ruby语言基础第一章 Ruby语言概述1.1 Ruby的历史Ruby语言的发明人是日本人松本行弘(Matsumoto Yukihiro),大家亲切的称呼他Matz。可能会出乎大家的意料,Ruby并不是一种近年来才诞生的语言,它的历史可以追溯到1993年,Ruby之父Matz开始对脚本语言感兴趣。在通过一些分析和思考之后,Matz认为脚本语言是可以变得很强大和灵活的,于是他准备把脚本语言作为他的发展方向。 和很多人一样,Matz是一个面向对象程序设计的fans,自然而然他想研究一种支持面向对象程序设计的脚本语言。随后

14、的一段时间,他到网络上搜集了一些相关的资料,并且发现了Perl 5,当时Perl 5还没有发布。通过一段时间了解后,Matz.发现Perl 5这并不是他想的东西,所以他放弃了把Perl当作一个面向对象的脚本语言使用的念头。随后Matz转向了Python,Python是一个解释型的、面向对象语言,但是Matz发现Python并不能完全算作“面向对象”语言。Matz认为Python是面向对象和过程化程序设计语言(Procedural Programming Language)的混合产物。Matz希望找到的是一种比Perl更强大、比Python更面向对象的语言,但是很遗憾, 这样的语言当时在地球上并

15、不存在。于是Matz打算自己设计一个全新的编程语言。1993年2月24日是一个值得纪念的日子,在这一天Ruby诞生了。 1995年12月Matz推出了Ruby的第一个版本Ruby 0.95。 在1996年以前,都是Matz.一个人在开发进行Ruby的开发。后来随着Ruby社区的渐渐形成,很多社区成员给了Matz许多有意义的帮助,包括提交bug和patch等。现在,Ruby像其他开源项目一样,有自己的开发团队,任何有能力的个人或团体都可以参与Ruby的开发与进化。1.2 Ruby名字的由来首先明确一点,Ruby并不是其他单词的缩写。受Perl的影响,Matz也想用一种宝石来命名他的新语言,他使用

16、了他的一位同事的生肖石红宝石。后来,Matz意识到Ruby这个名字十分恰当,首先,在生肖石中,Pearl代表六月,而Ruby代表七月。在字体大小上,Pearl大小是5pt, ruby的大小是5.5pt。所以Ruby这个名字对于一种Perl的后续语言十分合适。1.3 Ruby的特点Ruby是一种功能强大的面向对象的脚本语言,可以使用它方便快捷地进行面向对象程序设计。与Perl类似,而且Ruby具有强大的文本处理功能,使文本处理变得简单。此外还可以方便地使用C语言来扩展Ruby的功能。若您曾经“想要一种简单的面向对象的语言”,或者认为“Perl的功能虽然好用,但它的语法真让人受不了”,又或者觉得“

17、LISP系列语言的思想不错,但到处都是括号真让人讨厌,最起码算式应该按照通常的样式书写”。那么,Ruby或许能让您满意。归纳起来,Ruby有以下优点:l 解释型执行,方便快捷Ruby是解释型语言,其程序无需编译即可执行。l 语法简单、优雅语法比较简单,类似Algol系语法。l 完全面向对象Ruby从一开始就被设计成纯粹的面向对象语言,因此所有东西都是对象,例如整数等基本数据类型。l 内置正则式引擎,适合文本处理Ruby支持功能强大的字符串操作和正则表达式检索功能,可以方便的对字符串进行处理。l 自动垃圾收集具有垃圾回收(Garbage Collect,GC)功能,能自动回收不再使用的对象。不需

18、要用户对内存进行管理。l 跨平台和高度可移植性Ruby支持多种平台,在Windows, Unix, Linux, MacOS上都可以运行。Ruby程序的可移植性非常好,绝大多数程序可以不加修改的在各种平台上加以运行。l 有优雅、完善的异常处理机制Ruby提供了一整套异常处理机制,可以方便优雅地处理代码处理出错的情况。l 拥有很多高级特性Ruby拥有很多高级特性,例如操作符重载、Mix-ins、特殊方法等等,是用这些特性可以方便地完成各种强大的功能。同时,由于是解释型语言,Ruby也有下列缺点:l 解释型语言,所以速度较慢l 静态检查比较少1.4 Ruby和Python的比较Python是Rub

19、y的劲敌。其功力深厚,可谓“千年蛇妖”。但matz认为Python的功能仍不完美,不然就不会创造Ruby了。第二章 Ruby编程环境2.1 Ruby的安装Ruby支持多种平台,包括Windows、Linux、各种类UNIX、MacOS X等。2.1.1 在Windows 95/98/Me/XP上安装Ruby对于使用Windows平台的用户,安装Ruby是相当简单直接的事情。最方便的方法是使用“One-Click Ruby Installer”。不知你有没有听说过SourceForge?SourceForge 是全球最大的开放源代码软件开发平台和仓库。它集成了很多开放源代码应用程序,为软件开发提

20、供了整套生命周期服务。在Ruby世界,也有一个类似的网站,那就是Rubyforge。“One-Click Ruby Installer”是Rubyforge上的一个开源项目,也是Rubyforge上下载量最大的项目之一。这个项目将Ruby语言核心和一系列常用扩展集成到了一起,还包含支持Ruby的免费的IDE工具FreeRIDE和SciTE,除了这些之外还包括帮助文档,示例代码,RubyGems包管理器,Fox GUI库,fxri(Interactive Ruby Help & Console)等。和正如它名字所示,使用它,Ruby安装变得前所未见的容易。你可以在下面的地址下载到它的最新版本:h

21、ttp:/rubyforge.org/projects/rubyinstaller/2.1.2 在Linux上安装Ruby在linux下Ruby的安装要稍微复杂一些,推荐使用源码编译的方式安装,这样可以保证安装的是最新版本。首先到ruby主站http:/www.ruby-lang.org/en/ 下载源代码,下载完毕后解压到目录,然后使用以下命令:./configure./make; make install执行上面的命令需要root权限,默认安装到/usr/local下。你也可以使用“./configure -prefix=自定义路径”来指定安装目录。windows上的ruby one-cl

22、ick installer默认安装了RubyGems,但在Linux下我们需要手动安装RubyGems。RubyGems是一个Ruby的包管理器,我们后边会讲到它。首先从Rubyforge下载RubyGems的最近版本,地址如下:http:/rubyforge.org/projects/rubygems/解压RubyGems以后到相应目录下输入ruby setup.rb,屏幕上打印一些日志以后会告诉你安装成功,执行gem -v可以查看gem安装版本号。2.2 运行Ruby下面,我们将以Windows平台下的Ruby环境举例如何运行Ruby。2.2.1 使用Ruby将“Hello World”作

23、为学习计算机语言第一个学写的程序,现在已经成为一种传统。该程序最早出现在由Brian Kernighan和Dennis Ritchie写的经典计算机程序设计教程The C Programming Language。我们来看看Ruby世界的“Hello World”:在Windows中,打开命令行提示符窗口,在提示符上输入“Ruby”并回车,Ruby解释器就会运行并等候输入程序。Ruby可执行文件应该包含在系统搜索路径内。输入下面的程序:print Hello World!然后按Ctrl+D再按回车键,你就会看到Ruby执行程序的输出结果:你也可以先将代码保存为文件,然后使用再Ruby解释器执行

24、:2.2.2 使用FreeRIDE和SciTEFreeRIDE是一个支持Ruby语言的免费IDE环境。FreeRIDE本身就是使用Ruby语言开发,它也是Rubyforge上的重要项目之一。可以使用FreeRIDE来编写调试和执行Ruby代码,FreeRIDE内置了交互式变成环境和Ruby语言在线帮助,功能十分强大。Scintilla是一个免费的源代码编辑控件,它完全开放源代码,并允许用户自由地用于开源软件或是商业软件中。SciTE是用这个控件开发了一个编辑软件,在“One-Click Ruby Installer”中,SciTE集成了Ruby语言支持,使用起来非常方便。相比FreeRIDE,

25、它的特点就是使用简单。2.2.3 使用fxriFxri是一个Ruby交互帮助和控制台工具。它不仅可作为语言的在线帮助,而且可以用作交互式Ruby解释器来执行程序。对于学习Ruby语言,fxri是一个非常方便的帮手。不知你有没有听说过Fox ToolKit,它是相当轻巧的开放源代码的图形库。FXRuby是RubyForge上的一个项目,提供了Ruby语言使用Fox ToolKit的接口。而Fxri正是基于FXRuby开发,Fxri同样是RubyForge上的项目。这样你应该可以猜到Fxri名字的由来JFxri同时集成了Ruby-irb和Ruby-ri的功能,有了它,你可以抛开Ruby-irb,R

26、uby-ri了,但如果你用的不是Windows系统的话,算我没说J2.3 Ruby-irbRuby-irb是交互式Ruby(Interactive Ruby)的简称,用来从标准输入读入并执行Ruby代码的工具,像一个shell。使用命令“irb”进入交互式模式,然后可以象输入命令行命令一样输入Ruby代码,代码执行的结果会立刻显示:2.4 Ruby-ri和Perl一样,Ruby也设计了嵌入式文档。 ruby-ri就是查看文档的工具。Ruby-ri的执行命令为“ri”,例如你可以通过“ri String.new”来查询String类的new方法:2.5 RubyGemsRubyGems是Ruby

27、社区流行的包管理工具,在以前如果要下载一个Ruby扩展或者应用程序的话,你需要先下载相应的zip包,然后解压缩,再将应用或者扩展安装到Ruby对应的目录中。但是有了RubyGems所有这些麻烦都没有了,你只需要一条命令就可以从远程服务器上下载相应的包,如果相应的应用包含其他扩展,RubyGems会提示你从远程安装所依赖的扩展。安装后 RubyGems会运行相应的程序生成rdoc帮助文档。当然你也可以将软件包下载到本地运行RubyGems本地安装命令。统一化的管理带来的好处就是简单,有了RubyGems包管理器,Ruby应用的安装将变得前所未见的容易。RubyGems是Rubyforge下载量最

28、大的项目之一,现在Ruby社区的应用都在朝着RubyGems的方向发展,RubyGems也将成为Ruby事实上的包管理器标准。RubyGems包管理器的可执行命令是“gem”,gem命令包含很多子命令和相应的选项,例如:gem -h/-help 显示命令帮助gem -v/-version 显示Gems的版本号第三章 类与对象Ruby是一种真正的面向对象程序设计语言,面向对象指以对象为中心的理论体系。l 封装(Encapsulation)将内部结构和算法隐藏起来,以确保只有特定的过程(也叫方法)才能直接操作数据,其结果是不能从外部直接使用数据构造,同时一旦内部构造发生变化也不会对外界造成不良影响

29、。这种隔离方法就叫做封装。l 继承l 多态(Polymorphism)根据对象的不同选择合适的操作。在Ruby中的实现方法是,根据被调的对象的不同来选择不同的方法。虽然有很多语言都宣称自己是面向对象的,但是他们往往对面向对象的解释都一样,大多是以自己特有的方式来解释什么是面向对象,而在实际情况中,这些面向对象语言又采用了很多非面向对象的做法。以 Java 为例:如果你想取一个数字取绝对值,java 的做法是:int num = Math.abs(-99);也就是将一个数值传递给 Math 类的一个静态函数 abs 处理。为什么这么做?因为在 java 中,数值是基本类型不是类。而在 Ruby

30、中,任何事物都是对象,也就是说,数字99就是对象,取绝对值这样的操作应该属于数字本身,所以Ruby的做法就是:c = -99.abs在Ruby中,你所操作的一切都是对象,操作的结果也是对象。3.1 类的定义类是对具有同样属性和同样行为的对象的抽象,Ruby中类的声明使用class关键字。定义类的语法如下,class ClassNamedef method_name(variables)#some codeendend类的定义要在classend之间,在上面的格式中,ClassName是类名,类名必须以大写字母开始,也就是说类名要是个常量。看下面的例子:class Persondef initi

31、alize(name, gender, age)name = namegender = genderage = ageendend若某个类已经被定义过,此时又用相同的类名进行类定义的话,就意味着对原有的类的定义进行追加。class Testdef meth1puts This is meth1endendclass Testdef meth2puts This is meth2endend在Test类中,原有meth1方法,我们又追加了meth2方法,这时候,对于Test类的对象,meth1和meth2同样可用。3.2 对象,属性和方法类在实例化后生成对象,在强调对象归属于某类时,有时候我们也

32、使用实例对象一词。方法(Method)是对对象进行的操作。操作对象(被调)以self来表示。在Ruby中,除去内部类的对象以外,通常对象的构造都是动态确定的。某对象的性质由其内部定义的方法所决定。看下面的例子,我们使用new方法构造一个新的对象,class Persondef initialize(name, gender, age)name = namegender = genderage = ageendendpeople = Person.new(Tom, male, 15)我们可以使用Person.new方法来创建一个Person类的实例对象。以打头的变量是实例变量,他们从属于某一实例

33、对象,Ruby中实例变量的命名规则是变量名以开始,您只能在方法内部使用它。initialize方法使对象变为“就绪”状态,initialize方法是一个特殊的方法,这个方法在构造实例对象时会被自动调用。对实例进行初始化操作时,需要重定义initialize方法。类方法new的默认的行为就是对新生成的实例执行initialize方法,传给new方法的参数会被原封不动地传给initialize方法。另外,若带块调用时,该块会被传给initialize方法。因此,不必对new方法进行重定义。在Ruby中,只有方法可以操作实例变量,因此可以说Ruby中的封装是强制性的。在对象外部不可以直接访问,只能通

34、过接口方法访问。class Persondef namenameenddef gendergenderenddef ageageendendpeople = Person.new(Tom, male, 15)puts people.nameputs people.genderputs people.age输出结果为:Tommale15在Ruby中,一个对象的内部属性都是私有的。上面的代码中,我们定义了方法name,gender,age三个方法用来访问Person类实例对象的实例变量。注意name,gender,age访问只能读取相应实例变量,而不能改变它们的值。我们也可以用成员变量只读控制符a

35、ttr_reader来达到同样的效果。class Personattr_reader :name, :gender, :ageend类似地,我们可以定义方法去改变成员变量的值。class Persondef name=(name)name=nameenddef gender=(gender)gender=genderenddef age=(age)age=ageendendpeople = Person.new(Tom, male, 15)people.name= Henrypeople.gender= malepeople.age= 25也可以用成员变量写控制符attr_writer来达到同

36、样的效果。class Personattr_writer :name, :gender, :ageend我们也可以使用attr_accessor来说明成员变量既可以读,也可以写。class Personattr_accessor :name, :gender, :ageend也可以使用attr控制符来控制变量是否可读写。attr 只能带一个符号参数, 第二个参数是一个 bool 参数,用于指示是否为符号参数产生写方法。它的默认值是 false,只产生读方法,不产生写方法。class Personattr :name, true#读写attr :gender, true#读写attr :age,

37、 true#读写attr :id, false #只读end注意attr_reader,attr_writer,attr_accessor和attr不是语言的关键字,而是Module模块的方法。class Testattr_accessor :valueendputs Test.instance_methods - Test.superclass.public_methods执行结果为:valuevalue=上面代码中,我们使用Test.instance_methods得到Test类所有的实例方法,使用Test.superclass.public_methods得到Test父类所有的实例方法,

38、然后相减就得到Test类不包含父类的所有的实例方法。由于instance_methods方法返回值为一个Array,所以我们作差值运算,Array的具体操作后面章节会讲到。也可以重定义方法,重定义一个方法时,新的定义会覆盖原有的定义。下面的例子重定义类中的方法meth1,class Testdef meth1puts This is meth1endenda = Test.newa.meth1class Testdef meth1puts This is new meth1endenda. meth1执行结果为:This is meth1This is new meth1重定义同一个类时,意味

39、着对原有定义进行补充,不会覆盖原来的定义。而重定义方法时,则会覆盖原有定义。我们可以使用self标识本身,self和Java中的this有些类似,代表当前对象。class Persondef initialize(name, gender, age)name = namegender = genderage = ageenddef (other)self.age other.ageendend 方法通常意思为比较,返回值为-1,0或1分别表示小于,等于和大于。3.3 继承Ruby继承的语法很简单,使用 即可。class Student Persondef initialize(name, ge

40、nder, age, school)name = namegender = genderage = ageschool = schoolendendRuby语言只支持单继承,每一个类都只能有一个直接父类。这样避免了多继承的复杂度。但同时,Ruby提供了mixin的机制可以用来实现多继承。可以使用super关键字调用对象父类的方法,当super省略参数时,将使用当前方法的参数来进行调用。class Basedef meth(info)puts This is Base #infoendendclass Derived Basedef meth(info)puts This is derived

41、#infosuperendendobj1 = Derived.newobj1.meth(test)执行结果为:This is derived testThis is Base test如果传入的参数被修改再调用super的话,那么将会使用使用修改后的值。class Basedef meth(info)puts This is Base #infoendendclass Derived Basedef meth(info)puts This is derived #infoinfo = oversuperendendobj1 = Derived.newobj1.meth(test)执行结果为:T

42、his is derived testThis is Base over3.4 特殊方法与特殊类特殊方法是指某实例所特有的方法。一个对象有哪些行为由对向所属的类决定,但是有时候,一些特殊的对象有何其他对象不一样的行为,在多数程序设计语言中,例如C+和Java,我们必须定义一个新类,但在Ruby中,我们可以定义只从属于某个特定对象的方法,这种方法我们成为特殊方法(Singleton Method)。class SingletonTestdef infoputs This is This is SingletonTest methodendendobj1 = SingletonTest.newobj2 = SingletonTest.newdef obj2.infoputs This is ob

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1