詳解Ruby中的方法概念
Ruby方法跟其他編程語(yǔ)言中的函數(shù)非常相似, Ruby方法用于捆綁到一個(gè)單元中的一個(gè)或多個(gè)重復(fù)的語(yǔ)句。
方法名稱(chēng)應(yīng)以小寫(xiě)字母開(kāi)始。如果一個(gè)方法的名稱(chēng)以大寫(xiě)字母開(kāi)始,Ruby可能會(huì)認(rèn)為這是一個(gè)常數(shù),因此可以正確解析調(diào)用。
方法應(yīng)該定義Ruby的之前調(diào)用他們,否則會(huì)引發(fā)一個(gè)異常未定義的方法調(diào)用。
語(yǔ)法:
def method_name [( [arg [= default]]...[, * arg [, &expr ]])] expr.. end
所以,可以定義一個(gè)簡(jiǎn)單的方法如下:
def method_name expr.. end
可以表示方法,接受這樣的參數(shù):
def method_name (var1, var2) expr.. end
可以設(shè)置默認(rèn)值,如果不傳遞所需的參數(shù)調(diào)用方法的參數(shù)將用于:
def method_name (var1=value1, var2=value2) expr.. end
無(wú)論何時(shí)調(diào)用方法很簡(jiǎn)單,只需寫(xiě)方法的名稱(chēng)如下:
然而,當(dāng)調(diào)用一個(gè)方法帶有參數(shù),編寫(xiě)方法的名稱(chēng)以及參數(shù),如:
使用帶參數(shù)的方法的最重要缺陷是,每當(dāng)調(diào)用這些方法需要記住的參數(shù)個(gè)數(shù)。例如,如果一個(gè)方法接受三個(gè)參數(shù)傳遞只有兩個(gè),那么Ruby的將顯示一條錯(cuò)誤。
實(shí)例:
#!/usr/bin/ruby def test(a1="Ruby", a2="Perl") puts "The programming language is #{a1}" puts "The programming language is #{a2}" end test "C", "C++" test
這將產(chǎn)生以下結(jié)果:
The programming language is C The programming language is C++ The programming language is Ruby The programming language is Perl
從方法中返回值:
在Ruby中的每一個(gè)方法返回默認(rèn)值。這個(gè)返回值將是最后一個(gè)語(yǔ)句的值。例如:
def test i = 100 j = 10 k = 0 end
此方法被調(diào)用時(shí),將返回的最后聲明的變量k的值。
Ruby return 語(yǔ)句:
Ruby的return語(yǔ)句用于從一個(gè)Ruby方法返回一個(gè)或多個(gè)值。
語(yǔ)法:
如果有兩個(gè)以上的表達(dá)式給出,數(shù)組包含這些值將返回值。如果沒(méi)有表達(dá)式,將會(huì)是nil值返回。
實(shí)例:
OR
return 12
OR
return 1,2,3
看看這個(gè)例子:
#!/usr/bin/ruby def test i = 100 j = 200 k = 300 return i, j, k end var = test puts var
這將產(chǎn)生以下結(jié)果:
100 200 300
可變數(shù)目的參數(shù):
假設(shè)聲明一個(gè)方法需要兩個(gè)參數(shù)。每當(dāng)你調(diào)用這個(gè)方法,需要隨著它傳遞兩個(gè)參數(shù)。
但是Ruby允許聲明與可變數(shù)目的參數(shù)的方法。讓我們來(lái)看看這一個(gè)示例:
#!/usr/bin/ruby def sample (*test) puts "The number of parameters is #{test.length}" for i in 0...test.length puts "The parameters are #{test[i]}" end end sample "Zara", "6", "F" sample "Mac", "36", "M", "MCA"
在這段代碼中,已經(jīng)聲明接受一個(gè)參數(shù)測(cè)試方法示例。但是,這個(gè)參數(shù)是一個(gè)可變參數(shù)。這意味著,這個(gè)參數(shù)可以在任意數(shù)量的變量。所以上面的代碼將產(chǎn)生以下結(jié)果:
The number of parameters is 3 The parameters are Zara The parameters are 6 The parameters are F The number of parameters is 4 The parameters are Mac The parameters are 36 The parameters are M The parameters are MCA
類(lèi)方法:
類(lèi)定義之外定義一個(gè)方法時(shí),該方法被默認(rèn)標(biāo)記為私有。另一方面,在類(lèi)定義中定義的方為默認(rèn)標(biāo)示公有。可以改變默認(rèn)可視性和私有標(biāo)記的方法,由公共或私有的模塊。
每當(dāng)想訪問(wèn)一個(gè)類(lèi)的方法,首先需要實(shí)例化的類(lèi)。然后,使用對(duì)象可以訪問(wèn)任何類(lèi)的成員。
Ruby提供了一種方法來(lái)訪問(wèn)的方法,沒(méi)有實(shí)例化一個(gè)類(lèi)。讓我們來(lái)看看如何聲明一個(gè)類(lèi)的方法和訪問(wèn):
class Accounts def reading_charge end def Accounts.return_date end end
看看方法return_date聲明。聲明隨后的一個(gè)時(shí)期,這是其次的方法名與類(lèi)名??梢灾苯釉L問(wèn)這個(gè)類(lèi)的方法如下:
Accounts.return_date
要使用這種方法,不需要?jiǎng)?chuàng)建對(duì)象之類(lèi)的帳戶(hù)。
Ruby alias 語(yǔ)句:
方法或全局變量的別名。別名不能被定義在方法體。方法aliase保持當(dāng)前定義的方法,即使方法是覆蓋。
為全局變量($ 1,$ 2,...)的取別名是禁止。覆蓋內(nèi)置的全局變量,可能導(dǎo)致嚴(yán)重的問(wèn)題。
語(yǔ)法:
alias method-name method-name alias global-variable-name global-variable-name
例如:
alias foo bar alias $MATCH $&
這里我們定義了foo的別名bar和$MATCH函數(shù)的別名$&
Ruby undef 語(yǔ)句:
這取消的方法定義。一個(gè)是undef不能出現(xiàn)在方法體中。
通過(guò)使用 undef 和 alias, 可以從超類(lèi)獨(dú)立修改類(lèi)的接口,但注意到這可能被打破程序由內(nèi)部自行的方法調(diào)用。
語(yǔ)法:
實(shí)例:
取消定義bar方法,如下:
undef bar
相關(guān)文章
Ruby簡(jiǎn)明教程之?dāng)?shù)組和Hash介紹
這篇文章主要介紹了Ruby簡(jiǎn)明教程之?dāng)?shù)組和Hash介紹,非常簡(jiǎn)潔的講解,可以作為語(yǔ)法備忘,需要的朋友可以參考下2014-06-06Rails bundle命令安裝mysql gem包出錯(cuò)的解決方法
這篇文章主要介紹了Rails bundle命令安裝mysql gem包出錯(cuò)的解決方法,本文原因是沒(méi)有安裝mysql開(kāi)發(fā)包,需要的朋友可以參考下2014-08-08Windows下Ruby+Watir自動(dòng)化測(cè)試的環(huán)境搭建及數(shù)據(jù)讀取
這篇文章主要介紹了Windows下Ruby+Watir自動(dòng)化測(cè)試的環(huán)境搭建及數(shù)據(jù)讀取,Watir是一個(gè)使用Ruby實(shí)現(xiàn)的開(kāi)源Web自動(dòng)化測(cè)試框架,需要的朋友可以參考下2016-03-03詳細(xì)解讀Ruby當(dāng)中的條件判斷語(yǔ)句
這篇文章主要介紹了詳細(xì)解讀Ruby當(dāng)中的條件判斷語(yǔ)句,if、else等邏輯判斷語(yǔ)句是各門(mén)編程語(yǔ)言的基礎(chǔ),需要的朋友可以參考下2015-05-05學(xué)習(xí)Ruby你需要了解的相關(guān)知識(shí)(rvm, gem, bundle, rake, rails等)
這篇文章主要介紹了學(xué)習(xí)Ruby你需要了解的相關(guān)知識(shí)(rvm, gem, bundle, rake, rails等),需要的朋友可以參考下2014-06-06Ruby中訪問(wèn)SQL Server數(shù)據(jù)庫(kù)的配置實(shí)例
這篇文章主要介紹了Ruby中訪問(wèn)SQL Server數(shù)據(jù)庫(kù)的配置實(shí)例,本文通過(guò)FreeTDS實(shí)現(xiàn),同時(shí)介紹了在ActiveRecord上使用Tiny_TDS的技巧,需要的朋友可以參考下2014-11-11