亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Ruby基礎知識之方法、代碼段

 更新時間:2015年04月16日 09:55:15   投稿:junjie  
這篇文章主要介紹了Ruby基礎知識之方法、代碼段,本文講解了定義方法、取消方法、方法參數(shù)、代碼塊和閉包等知識,需要的朋友可以參考下

Ruby中的方法是一個有名稱的代碼塊,是與一個或多個對象關聯(lián)的參數(shù)化的代碼。調(diào)用時須給出方法名,接收者(所在對象),參數(shù)值,且最后一個表達式的值做為返回值。與Ruby方法相似的是代碼塊,它沒有名字,且調(diào)用時只通過迭代器或被間接調(diào)用。
 
(一)方法
(1)定義方法

定義方法就是

復制代碼 代碼如下:

def 方法名(參數(shù)列表)
方法體
end

最后一個表達式做為返回值返回,如果有值,則返回;無值則返回nil。可以省略return。
在類中定義的方法為實例方法,實例方法可以在類的實例對象上使用。如果是在一個特定的對象上定義方法,那么此方法就是一個單鍵方法,只能在這個對象上使用。

復制代碼 代碼如下:

class Test
  def instance_method_test(v)
    puts "#{v}: instance method"
  end 
end
 
t1=Test.new
t2=Test.new
t1.instance_method_test("t1")
t2.instance_method_test("t2")
 
def t1.singleton_method_test(v)
  puts "#{v}:singleton method"
end
 
t1.singleton_method_test("t1")
#t2.singleton_method_test("t2")

在ruby中,方法一般小寫字母開頭,如果超過一個單詞,則由下劃線隔開(看習慣)。有意思的是方法名可以以等號、問號、嘆號結(jié)尾,且有不同的意義:以等號(=)結(jié)尾表示這是一個賦值方法(寫屬性);以問號(?)結(jié)尾表示一個斷言方法,可以回答調(diào)用者提出問題的值,例如判斷大??;嘆號(!)結(jié)尾表示是一個可變方法,可能會影響到對象的狀態(tài),要小心使用。這三個符號很有意思,但它們不是必須的。

(2)取消方法

通過undef 方法名 可以取消方法。對于被繼承的方法,undef可以取消子類中的繼承來的方法,但不會取消父類中的此方法。

(3)方法參數(shù)

在參數(shù)中添加等號和值就可以為這一個參數(shù)設置默認值。如果參數(shù)有默認值,那么在調(diào)用方法時,可以為這個參數(shù)指定值或不指定值。

復制代碼 代碼如下:

def createRole(name,level=1)
  puts "role name is#{:name} level is #{level}"
end
 
createRole("way")
createRole("clound",5)

通過在參數(shù)前邊加星號(*),可以為方法指定為可變參數(shù)個數(shù)(數(shù)組參數(shù)),且指定的個數(shù)最多為一個。
復制代碼 代碼如下:

def add_Person(*users)
  puts users
end
add_Person("a1","a2")
add_Person("a1","a2","a3")

如果要把數(shù)組傳遞給方法,要在數(shù)組前加星號(*)。

(二)代碼塊
方法調(diào)用后可以緊跟一個代碼塊,關聯(lián)代碼塊的方法可以通過yield來調(diào)用。

復制代碼 代碼如下:

def showMessage(i)
  yield i*2
  print i
end
 
showMessage(5){|x|print "#{x}"}

代碼塊通過yield調(diào)用,也可以做為方法參數(shù)傳遞,但前提是這個參數(shù)前需要添加&做為前綴且為最后一個參數(shù)。而此時它以一個proc對象傳遞,調(diào)用時不能通過yield調(diào)用,而是通過proc的call方法調(diào)用。另外,如果以顯示方式,即傳遞proc對象給方法,那方法定義的參數(shù)就不加&前綴了。通過&前綴,代碼塊可以與任何方法調(diào)用關聯(lián)起來,即使此方法沒有yield語句。任何方法調(diào)用都可以用&參數(shù)作為最后一個參數(shù)。所有支持to_proc的方法都能用&。
復制代碼 代碼如下:

#傳遞代碼塊,代碼塊參數(shù)須為最后一個,且添加&前綴;且調(diào)用時用proc的call方法
def fun_block(i,&b)
  b.call(i*2)
end
fun_block(2){|x|puts x}
 
#顯示傳遞proc對象。那么方法中proc對象部分的參數(shù)不加&前綴
def fun_proc(i,b)
  b.call(i*2)
end
p=Proc.new{|x|puts x}
fun_proc(2,p)
 
c=[1,2,3,4,5,6]
b=c.select{|x|x%2==0}
p1=Proc.new{|x|x%2==0}
d=c.select(&p1)
puts d

代碼塊是Ruby的一種句法結(jié)構(gòu),不是對象,但可以創(chuàng)建對象來表示一個代碼塊。根據(jù)對象的創(chuàng)建方式,分為proc或lambda。proc行為與代碼塊相似;lambda行為與方法相似,但它們都是Proc類的實例。
 
通過Proc.new創(chuàng)建一個proc,在1.9版本中,與proc方法為同義詞;通過lambda方法,創(chuàng)建一個lambda。lambda方法不帶參數(shù),調(diào)用時段關聯(lián)一個代碼塊。
 
在ruby 1.9中,支持一種新的句法。將lambda換為->;將參數(shù)放到花括號外邊,小括號里邊;花括號中只保留表達式。(可以與.net3.*中的lambda比較:()=>{})
復制代碼 代碼如下:

#1.8k中
d1=lambda{|x|x+1}
puts d1.call(5)
#1.9中,將lambda換為->;參數(shù)放到花括號外邊,小括號里邊;花括號中只保留表達式
#與.net3.*中的lambda表達式很像()=>{}
d2=->(x){x+1}
d2.call(5)

這種新句法,使代碼簡潔,并使代碼段與ruby方法的統(tǒng)一,例如:設置參數(shù)默認值。
(三)閉包

ruby中的proc和lambda都是閉包(closure)。閉包表示一個對象既是一個可調(diào)用的函數(shù),同時也是綁定在這個函數(shù)上的一個變量。從表面上解釋閉包就是:方法A內(nèi)的方法B調(diào)用方法A的變量,并返回結(jié)果。方法B就是閉包。它的作用:一是B方法的變量可以在方法外使用;二是A方法中的變量可以安全使用;三是對B方法中的值進行緩存。
(關于閉包,可以查看相關文檔,我這里只是粗淺的認識。)

相關文章

  • Ruby程序中發(fā)送基于HTTP協(xié)議的請求的簡單示例

    Ruby程序中發(fā)送基于HTTP協(xié)議的請求的簡單示例

    這篇文章主要介紹了Ruby程序中發(fā)送基于HTTP協(xié)議的請求的簡單示例,包括對HTTPS請求的介紹,需要的朋友可以參考下
    2016-03-03
  • Ruby中使用SWIG編寫ruby擴展模塊實例

    Ruby中使用SWIG編寫ruby擴展模塊實例

    這篇文章主要介紹了Ruby中使用SWIG編寫ruby擴展模塊實例,SWIG是一種簡化腳本語言與C/C++接口的開發(fā)工具,需要的朋友可以參考下
    2014-09-09
  • Ruby on Rails遷移時的一些注意事項

    Ruby on Rails遷移時的一些注意事項

    這篇文章主要介紹了Ruby on Rails遷移時的一些注意事項,包括建議的使用change方法取代up與down方法等細節(jié),需要的朋友可以參考下
    2015-08-08
  • ruby 類常量 解析

    ruby 類常量 解析

    ruby 類常量 解析...
    2007-11-11
  • ruby 程序的執(zhí)行順序

    ruby 程序的執(zhí)行順序

    ruby程序的執(zhí)行是順序執(zhí)行的,他是從腳本的第一行執(zhí)行到最后一行,但是實際執(zhí)行順序是
    2008-12-12
  • Ruby簡明教程之方法(Method)介紹

    Ruby簡明教程之方法(Method)介紹

    這篇文章主要介紹了Ruby簡明教程之方法(Method)介紹,ruby的方法分為實例方法、類方法、函數(shù)方法等,本文分別做了講解,需要的朋友可以參考下
    2014-06-06
  • Ruby中百分號和字面值的使用示例

    Ruby中百分號和字面值的使用示例

    這篇文章主要介紹了Ruby中百分號和字面值的使用示例,作者給出了相關編程風格上的一些建議,需要的朋友可以參考下
    2015-08-08
  • Ruby中操作文件的方法介紹

    Ruby中操作文件的方法介紹

    這篇文章主要介紹了Ruby中操作文件的方法介紹,是Ruby學習當中的基礎知識,需要的朋友可以參考下
    2015-05-05
  • Ruby元編程小結(jié)

    Ruby元編程小結(jié)

    這篇文章主要介紹了Ruby元編程小結(jié),元編程是可以在運行時動態(tài)的操作語言結(jié)構(gòu)(如類、模塊、實例變量等)的技術,需要的朋友可以參考下
    2015-01-01
  • Ruby編程中的語法使用風格推薦

    Ruby編程中的語法使用風格推薦

    這篇文章主要介紹了Ruby編程中的語法使用風格推薦,好的代碼書寫風格有助于debug等工作的進行,需要的朋友可以參考下
    2015-08-08

最新評論