时间:2021-05-22
什么叫做一个方法呢?在OO编程里,我们不希望直接从外部操纵一个对象的数据;相反的,对象自己了解如何操纵自身(当被恰当地要求时).
你也许会说我们传递一条消息给一个对象,那些消息就会调用某类行为或者做有意义的回复.这些都会在我们无需了解或关心这个对象内部
工作机制的情况下发生.为我们所允许的可让其执行的作业(或等价的,它能听懂的消息)就是对象的方法.
在ruby里,我们通过点(dotnotation,正如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:undefinedmethod`length'for5(Fixnum)
所以我们就需要了解什么方法是被这一对象所接受的,虽然我们并不需要了解这个方法是如何工作的.
如果要给方法赋参数,参数应在一对括号内,
object.method(arg1,arg2)
如果不会引起歧义,括号可以去掉.
object.methodarg1,arg2
Ruby里有个特殊变量self;它指向任意调用方法的对象.由于"self"经常用到,为了方便它可被省掉:
self.method_name(args...)
和这一样
method_name(args...)
我们传统意义上的函数调用只不过是self方式调用的一种简写罢了.这也使Ruby可以叫作一种纯正的面向对象语言.当然,为了那些搞不清在Ruby里函数调用其实就是对象方法的人,函数化的方法看起来很像在别的语言中的函数.如果我们喜欢,我们也可以叫它们函数,就仿佛他们不是真的对象方法一样.
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例分析了C#静态方法与非静态方法,并对其用法进行了较为全面的分析。分享给大家供大家参考。具体分析如下:通常来说,C#的类中可以包含两种方法:静态方法和非静
本文实例分析了jQueryon()方法的用法。分享给大家供大家参考。具体分析如下:一、jQueryon()方法的使用:on(events,[selector],
本文较为详细的分析了jQuery源码解读之removeClass()方法。分享给大家供大家参考。具体分析如下:removeClass()方法和addClass(
网店推广是网店工作的重中之重,当然,推广方法很多,如何选出适合自己的呢?这就要靠你的分析:对自己网店的分析和对推广方法的分析。★★★★★合理设置宝贝名称 宝贝名
本文实例分析了asp.net中virtual和abstract的区别,分享给大家供大家参考。具体分析如下:一、Virtual方法(虚方法)virtual关键字用