一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Ruby - Ruby基礎知識之方法、代碼段

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

2020-04-26 10:15腳本之家 Ruby

這篇文章主要介紹了Ruby基礎知識之方法、代碼段,本文講解了定義方法、取消方法、方法參數、代碼塊和閉包等知識,需要的朋友可以參考下

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

定義方法就是

復制代碼 代碼如下:

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

(2)取消方法

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

(3)方法參數

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

復制代碼 代碼如下:

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


通過在參數前邊加星號(*),可以為方法指定為可變參數個數(數組參數),且指定的個數最多為一個。

復制代碼 代碼如下:

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


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

 

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

復制代碼 代碼如下:

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


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

復制代碼 代碼如下:

#傳遞代碼塊,代碼塊參數須為最后一個,且添加&前綴;且調用時用proc的call方法
def fun_block(i,&b)
  b.call(i*2)
end
fun_block(2){|x|puts x}
 
#顯示傳遞proc對象。那么方法中proc對象部分的參數不加&前綴
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的一種句法結構,不是對象,但可以創建對象來表示一個代碼塊。根據對象的創建方式,分為proc或lambda。proc行為與代碼塊相似;lambda行為與方法相似,但它們都是Proc類的實例。
 
通過Proc.new創建一個proc,在1.9版本中,與proc方法為同義詞;通過lambda方法,創建一個lambda。lambda方法不帶參數,調用時段關聯一個代碼塊。
 
在ruby 1.9中,支持一種新的句法。將lambda換為->;將參數放到花括號外邊,小括號里邊;花括號中只保留表達式。(可以與.net3.*中的lambda比較:()=>{})

復制代碼 代碼如下:

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


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

 

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

延伸 · 閱讀

精彩推薦
  • RubyRuby設計模式編程中使用Builder建造者模式的實例

    Ruby設計模式編程中使用Builder建造者模式的實例

    這篇文章主要介紹了Ruby設計模式編程中使用Builder建造者模式的實例,建造者模式將一個復雜對象的構造與它的表示分離,使同樣的構建過程可以創建不同的表...

    范孝鵬2192020-05-07
  • RubyRuby簡潔學習筆記(一):字符串、數字、類和對象

    Ruby簡潔學習筆記(一):字符串、數字、類和對象

    這篇文章主要介紹了Ruby簡潔學習筆記(一):字符串、數字、類和對象,本文是學習筆記第一篇,需要的朋友可以參考下 ...

    腳本之家2472020-04-20
  • Ruby剖析 Ruby 訪問控制

    剖析 Ruby 訪問控制

    前面,我們說 Ruby 沒有函數,只有方法.而且實際上有不止一種方法.這一節我們介紹 訪問控制 (accesscontrols). 想想當我們在最高層而不是在一個類的定義里定義...

    ruby教程網3572020-04-08
  • Ruby簡要說明Ruby中的迭代器

    簡要說明Ruby中的迭代器

    這篇文章主要介紹了Ruby中的迭代器,迭代器的概念在動態語言的編程中十分重要,文章中介紹了Ruby中的each迭代器和collect迭代器,需要的朋友可以參考下 ...

    goldensun2772020-04-25
  • RubyRuby迭代器的7種技巧分享

    Ruby迭代器的7種技巧分享

    這篇文章主要介紹了Ruby迭代器的7種技巧分享,Ruby中的迭代器非常人性化,本文既是講解了7個技巧也是講解了7種迭代器,需要的朋友可以參考下 ...

    腳本之家4782020-04-20
  • RubyRuby環境下安裝使用bundler來管理多版本的gem

    Ruby環境下安裝使用bundler來管理多版本的gem

    這篇文章主要介紹了Ruby環境下安裝使用bundler來管理多版本的gem的方法,舉了Ruby On Rails中的應用實例來進行演示,需要的朋友可以參考下 ...

    日拱一卒4332020-05-10
  • RubyRuby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼,數據是隨機的,所以每次的記錄都會不同。 ...

    ruby教程網2962020-04-10
  • RubyCentOS中配置Ruby on Rails環境

    CentOS中配置Ruby on Rails環境

    經過一個上午的折騰,終于把ROR環境在CentOS中搞定,繞了很多彎路,把文章寫下來總結一下 ...

    可樂加糖4762020-04-12
主站蜘蛛池模板: 91热这里只有精品 | 成年人免费在线看 | 极品美女写真菠萝蜜视频 | 精品综合一区二区三区 | 蜜桃视频一区二区 | 99热综合在线 | 亚洲欧美日韩精品久久亚洲区 | 日本卡一卡2卡3卡4精品卡无人区 | 美女全身体光羞羞漫画 | 免费91麻豆精品国产自产在线观看 | 外国老少性配 | 国产专区视频在线观看 | 国产精品www夜色影视 | 成人午夜剧场 | 午夜熟女插插XX免费视频 | 四虎影院com | 亚洲男人天堂av | 国产91精选在线观看麻豆 | 精品久久久久久国产91 | 欧洲美女bbbxxxxxx| 日产乱码卡1卡2卡三免费 | 男女爆操 | 把美女屁股眼扒开图片 | av在线亚洲男人的天堂 | 欧美乱妇高清无乱码视频在线 | 99爱免费| 久久国产精品高清一区二区三区 | 精品国产影院 | 亚洲AV久久无码精品蜜桃 | 日本亚欧乱色视频在线观看 | 久久精品国产免费播放 | 天堂网在线.www天堂在线视频 | 性插图动态图无遮挡 | 黑人巨鞭大战白妞10级 | 四虎影院免费视频 | 国产农村乱子伦精品视频 | 视频一区在线观看 | 国产精品1| 女同全黄h全肉动漫 | 四虎影视在线永久免费观看 | 亚洲成人免费 |