目录搜索
Ruby用户指南3、开始4、简单的例子5、字符串6、正则表达式7、数组8、回到那些简单的例子9、流程控制10、迭代器11、面向对象思维12、方法13、类14、继承15、重载方法16、访问控制17、单态方法18、模块19、过程对象20、变量21、全局变量22、实变量23、局部变量24、类常量25、异常处理:rescue26、异常处理:ensure27、存取器28、对象的初始化29、杂项RGSS入门教程1、什么是RGSS2、开始:最简单的脚本3、数据类型:数字4、数据类型:常量与变量5、数据类型:字符串6、控制语句:条件分歧语句7、控制语句:循环8、函数9、对象与类10、显示图片11、数组12、哈希表(关联数组)13、类14、数据库15、游戏对象16、精灵的管理17、窗口的管理18、活动指令19、场景类Programming Ruby的翻译Programming Ruby: The Pragmatic Programmer's Guide前言RoadmapRuby.new类,对象和变量容器Containers,块Blocks和迭代Iterators标准类型深入方法表达式Expressions异常,捕捉和抛出(已经开始,by jellen)模块基本输入输出线程和进程当遭遇挫折Ruby和它的世界Ruby和Web开发Ruby TkRuby 和微软的 Windows扩展RubyRuby语言 (by jellen)类和对象 (by jellen)Ruby安全反射Reflection内建类和方法标准库OO设计网络和Web库Windows支持内嵌文档交互式Ruby Shell支持Ruby参考手册Ruby首页卷首语Ruby的启动环境变量对象执行结束时的相关处理线程安全模型正则表达式字句构造程序变量和常数字面值操作符表达式控制结构方法调用类/方法的定义内部函数内部变量内部常数内部类/模块/异常类附加库Ruby变更记录ruby 1.6 特性ruby 1.7 特性Ruby术语集Ruby的运行平台pack模板字符串sprintf格式Marshal格式Ruby FAQRuby的陷阱
文字

什么叫做一个方法呢?在OO编程里,我们不希望直接从外部操纵一个对象的数据;相反的,对象自己了解如何操纵自身(当被恰当地要求时).
你也许会说我们传递一条消息给一个对象,那些消息就会调用某类行为或者做有意义的回复.这些都会在我们无需了解或关心这个对象内部
工作机制的情况下发生.为我们所允许的可让其执行的作业(或等价的,它能听懂的消息)就是对象的方法. 

在ruby里,我们通过点(dot notation,正如C++或Java)来调用一个对象的方法.被调用的对象在点的左方给出.

ruby> "abcdef".length
   6 

表面上看,这一字符串被问及其长度.技术上看,我们正调用对象"abcdef"的length方法.

其它的对象也许拥有一个稍有不同的length接口,或者根本没有.消息的如何应答在程序运行期间做决定,行为也取决于其所指变量.

ruby> foo = "abc"
   "abc"
ruby> foo.length
   3
ruby> foo = ["abcde", "fghij"]
   ["abcde", "fghij"]
ruby> foo.length
   2 

length的意义也会随对象的变化而改变.在上例中,第一次我们叫foo返回其长度,它对应于一个简单字符串,这里也就只有一种合理的答案.第二次,foo代表一个数组,我们也许会考虑其长度为2,5或10;但一般情况下最合适的答案当然是2(其它类型长度也应被很容易的猜出).

ruby> foo[0].length
   5
ruby> foo[0].length + foo[1].length
   10 

这里需注意的是一个数组了解其自身作为一个数组的意义.Ruby中的一部分代码赋予了他们这一性质,因此对他们的需求可以自动的通过各种
适当的方法实现.由于相当少量的对应于我们在自然语言中所表达概念的方法名能被不同种类的数据如我们所愿地采用,这便将程序员从大量特殊函数名中解脱出来.OO编程语言的这一特点(在我看来,Java的这一点做的并不是很好)叫做多态(polymorphism). 

当一个对象碰到一个不能理解的信息,一个错误便会"发生":

ruby> foo = 5
   5
ruby> foo.length
ERR: (eval):1: undefined method `length' for 5(Fixnum) 

所以我们就需要了解什么方法是被这一对象所接受的,虽然我们并不需要了解这个方法是如何工作的.

如果要给方法赋参数,参数应在一对括号内,

object.method(arg1, arg2)

如果不会引起歧义,括号可以去掉.

object.method arg1, arg2

Ruby里有个特殊变量self;它指向任意调用方法的对象.由于"self"经常用到,为了方便它可被省掉:

self.method_name(args...)

和这一样

method_name(args...)

我们传统意义上的函数调用只不过是self方式调用的一种简写罢了.这也使Ruby可以叫作一种纯正的面向对象语言.当然,为了那些搞不清在Ruby里函数调用其实就是对象方法的人,函数化的方法看起来很像在别的语言中的函数.如果我们喜欢,我们也可以叫它们函数,就仿佛他们不是真的对象方法一样. 版权声明:RUBY文档中心的所有文章标明[原创]的均为本站作品,版权属RUBY中文化计划,若转载请注明;标明[翻译]的其外文版权归原作者,译文版权属RUBY中文化计划;标明[转贴]的,若原作者感到侵犯了他的著作权,那么请及时跟主持人联系,我们会尽快更正。  
上一篇:下一篇: