什么叫做一个方法呢?在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里,我们通过点(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里函数调用其实就是对象方法的人,函数化的方法看起来很像在别的语言中的函数.如果我们喜欢,我们也可以叫它们函数,就仿佛他们不是真的对象方法一样.
标签:
rudy,方法,分析
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“rudy 方法 分析”评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
2024年11月24日
2024年11月24日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]