rudy 方法 分析
更新時間:2007年11月24日 14:05:59 作者:
什么叫做一個方法呢?在OO編程里,我們不希望直接從外部操縱一個對象的數(shù)據(jù);相反的,對象自己了解如何操縱自身(當(dāng)被恰當(dāng)?shù)匾髸r).
你也許會說我們傳遞一條消息給一個對象,那些消息就會調(diào)用某類行為或者做有意義的回復(fù).這些都會在我們無需了解或關(guān)心這個對象內(nèi)部
工作機(jī)制的情況下發(fā)生.為我們所允許的可讓其執(zhí)行的作業(yè)(或等價的,它能聽懂的消息)就是對象的方法.
在ruby里,我們通過點(diǎn)(dot notation,正如C++或Java)來調(diào)用一個對象的方法.被調(diào)用的對象在點(diǎn)的左方給出.
ruby> "abcdef".length
6
表面上看,這一字符串被問及其長度.技術(shù)上看,我們正調(diào)用對象"abcdef"的length方法.
其它的對象也許擁有一個稍有不同的length接口,或者根本沒有.消息的如何應(yīng)答在程序運(yùn)行期間做決定,行為也取決于其所指變量.
ruby> foo = "abc"
"abc"
ruby> foo.length
3
ruby> foo = ["abcde", "fghij"]
["abcde", "fghij"]
ruby> foo.length
2
length的意義也會隨對象的變化而改變.在上例中,第一次我們叫foo返回其長度,它對應(yīng)于一個簡單字符串,這里也就只有一種合理的答案.第二次,foo代表一個數(shù)組,我們也許會考慮其長度為2,5或10;但一般情況下最合適的答案當(dāng)然是2(其它類型長度也應(yīng)被很容易的猜出).
ruby> foo[0].length
5
ruby> foo[0].length + foo[1].length
10
這里需注意的是一個數(shù)組了解其自身作為一個數(shù)組的意義.Ruby中的一部分代碼賦予了他們這一性質(zhì),因此對他們的需求可以自動的通過各種
適當(dāng)?shù)姆椒▽崿F(xiàn).由于相當(dāng)少量的對應(yīng)于我們在自然語言中所表達(dá)概念的方法名能被不同種類的數(shù)據(jù)如我們所愿地采用,這便將程序員從大量特殊函數(shù)名中解脫出來.OO編程語言的這一特點(diǎn)(在我看來,Java的這一點(diǎn)做的并不是很好)叫做多態(tài)(polymorphism).
當(dāng)一個對象碰到一個不能理解的信息,一個錯誤便會"發(fā)生":
ruby> foo = 5
5
ruby> foo.length
ERR: (eval):1: undefined method `length' for 5(Fixnum)
所以我們就需要了解什么方法是被這一對象所接受的,雖然我們并不需要了解這個方法是如何工作的.
如果要給方法賦參數(shù),參數(shù)應(yīng)在一對括號內(nèi),
object.method(arg1, arg2)
如果不會引起歧義,括號可以去掉.
object.method arg1, arg2
Ruby里有個特殊變量self;它指向任意調(diào)用方法的對象.由于"self"經(jīng)常用到,為了方便它可被省掉:
self.method_name(args...)
和這一樣
method_name(args...)
我們傳統(tǒng)意義上的函數(shù)調(diào)用只不過是self方式調(diào)用的一種簡寫罷了.這也使Ruby可以叫作一種純正的面向?qū)ο笳Z言.當(dāng)然,為了那些搞不清在Ruby里函數(shù)調(diào)用其實就是對象方法的人,函數(shù)化的方法看起來很像在別的語言中的函數(shù).如果我們喜歡,我們也可以叫它們函數(shù),就仿佛他們不是真的對象方法一樣.
你也許會說我們傳遞一條消息給一個對象,那些消息就會調(diào)用某類行為或者做有意義的回復(fù).這些都會在我們無需了解或關(guān)心這個對象內(nèi)部
工作機(jī)制的情況下發(fā)生.為我們所允許的可讓其執(zhí)行的作業(yè)(或等價的,它能聽懂的消息)就是對象的方法.
在ruby里,我們通過點(diǎn)(dot notation,正如C++或Java)來調(diào)用一個對象的方法.被調(diào)用的對象在點(diǎn)的左方給出.
ruby> "abcdef".length
6
表面上看,這一字符串被問及其長度.技術(shù)上看,我們正調(diào)用對象"abcdef"的length方法.
其它的對象也許擁有一個稍有不同的length接口,或者根本沒有.消息的如何應(yīng)答在程序運(yùn)行期間做決定,行為也取決于其所指變量.
ruby> foo = "abc"
"abc"
ruby> foo.length
3
ruby> foo = ["abcde", "fghij"]
["abcde", "fghij"]
ruby> foo.length
2
length的意義也會隨對象的變化而改變.在上例中,第一次我們叫foo返回其長度,它對應(yīng)于一個簡單字符串,這里也就只有一種合理的答案.第二次,foo代表一個數(shù)組,我們也許會考慮其長度為2,5或10;但一般情況下最合適的答案當(dāng)然是2(其它類型長度也應(yīng)被很容易的猜出).
ruby> foo[0].length
5
ruby> foo[0].length + foo[1].length
10
這里需注意的是一個數(shù)組了解其自身作為一個數(shù)組的意義.Ruby中的一部分代碼賦予了他們這一性質(zhì),因此對他們的需求可以自動的通過各種
適當(dāng)?shù)姆椒▽崿F(xiàn).由于相當(dāng)少量的對應(yīng)于我們在自然語言中所表達(dá)概念的方法名能被不同種類的數(shù)據(jù)如我們所愿地采用,這便將程序員從大量特殊函數(shù)名中解脫出來.OO編程語言的這一特點(diǎn)(在我看來,Java的這一點(diǎn)做的并不是很好)叫做多態(tài)(polymorphism).
當(dāng)一個對象碰到一個不能理解的信息,一個錯誤便會"發(fā)生":
ruby> foo = 5
5
ruby> foo.length
ERR: (eval):1: undefined method `length' for 5(Fixnum)
所以我們就需要了解什么方法是被這一對象所接受的,雖然我們并不需要了解這個方法是如何工作的.
如果要給方法賦參數(shù),參數(shù)應(yīng)在一對括號內(nèi),
object.method(arg1, arg2)
如果不會引起歧義,括號可以去掉.
object.method arg1, arg2
Ruby里有個特殊變量self;它指向任意調(diào)用方法的對象.由于"self"經(jīng)常用到,為了方便它可被省掉:
self.method_name(args...)
和這一樣
method_name(args...)
我們傳統(tǒng)意義上的函數(shù)調(diào)用只不過是self方式調(diào)用的一種簡寫罷了.這也使Ruby可以叫作一種純正的面向?qū)ο笳Z言.當(dāng)然,為了那些搞不清在Ruby里函數(shù)調(diào)用其實就是對象方法的人,函數(shù)化的方法看起來很像在別的語言中的函數(shù).如果我們喜歡,我們也可以叫它們函數(shù),就仿佛他們不是真的對象方法一樣.
相關(guān)文章
Ruby中實現(xiàn)統(tǒng)計文件行數(shù)、單詞數(shù)和字符數(shù)
這篇文章主要介紹了Ruby中實現(xiàn)統(tǒng)計文件行數(shù)、單詞數(shù)和字符數(shù),本文是自定義的一個函數(shù),需要的朋友可以參考下2015-01-01使用Ruby on Rails快速開發(fā)web應(yīng)用的教程實例
這篇文章主要介紹了使用Ruby on Rails快速開發(fā)web應(yīng)用的教程實例,本文來自于IBM官方技術(shù)文檔,需要的朋友可以參考下2015-04-04Ruby使用Monkey Patch猴子補(bǔ)丁方式進(jìn)行程序開發(fā)的示例
Monkey Patch猴子補(bǔ)丁是指在程序解釋運(yùn)行時動態(tài)添加類或模塊的做法,這里我們就來看一下Ruby使用Monkey Patch猴子補(bǔ)丁方式進(jìn)行程序開發(fā)的示例2016-05-05使用Ruby編寫腳本進(jìn)行系統(tǒng)管理的教程
這篇文章主要介紹了使用Ruby編寫腳本進(jìn)行系統(tǒng)管理的教程,本文來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下2015-04-04ruby元編程之method_missing的一個使用細(xì)節(jié)
這篇文章主要介紹了ruby元編程之method_missing的一個使用細(xì)節(jié),本文介紹在使用method_missing時造成死循環(huán)的一個現(xiàn)象,需要的朋友可以參考下2015-05-05ruby+nokogori抓取糗事百科前10頁并存儲進(jìn)數(shù)據(jù)庫示例
這篇文章主要介紹了ruby+nokogori抓取糗事百科前10頁并存儲進(jìn)數(shù)據(jù)庫示例,需要的朋友可以參考下2014-05-05