国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

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

服務(wù)器之家 - 腳本之家 - Ruby - Ruby基礎(chǔ)知識(shí)之方法、代碼段

Ruby基礎(chǔ)知識(shí)之方法、代碼段

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

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

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

定義方法就是

復(fù)制代碼 代碼如下:

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


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

 

 

復(fù)制代碼 代碼如下:

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

(2)取消方法

通過(guò)undef 方法名 可以取消方法。對(duì)于被繼承的方法,undef可以取消子類中的繼承來(lái)的方法,但不會(huì)取消父類中的此方法。

(3)方法參數(shù)

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

復(fù)制代碼 代碼如下:

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


通過(guò)在參數(shù)前邊加星號(hào)(*),可以為方法指定為可變參數(shù)個(gè)數(shù)(數(shù)組參數(shù)),且指定的個(gè)數(shù)最多為一個(gè)。

復(fù)制代碼 代碼如下:

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


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

 

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

復(fù)制代碼 代碼如下:

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


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

復(fù)制代碼 代碼如下:

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

復(fù)制代碼 代碼如下:

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


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

 

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

延伸 · 閱讀

精彩推薦
  • RubyRuby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例

    Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例

    這篇文章主要介紹了Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例,建造者模式將一個(gè)復(fù)雜對(duì)象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表...

    范孝鵬2192020-05-07
  • RubyRuby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對(duì)象

    Ruby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對(duì)象

    這篇文章主要介紹了Ruby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對(duì)象,本文是學(xué)習(xí)筆記第一篇,需要的朋友可以參考下 ...

    腳本之家2472020-04-20
  • Ruby剖析 Ruby 訪問(wèn)控制

    剖析 Ruby 訪問(wèn)控制

    前面,我們說(shuō) Ruby 沒(méi)有函數(shù),只有方法.而且實(shí)際上有不止一種方法.這一節(jié)我們介紹 訪問(wèn)控制 (accesscontrols). 想想當(dāng)我們?cè)谧罡邔佣皇窃谝粋€(gè)類的定義里定義...

    ruby教程網(wǎng)3572020-04-08
  • Ruby簡(jiǎn)要說(shuō)明Ruby中的迭代器

    簡(jiǎn)要說(shuō)明Ruby中的迭代器

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

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

    Ruby迭代器的7種技巧分享

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

    腳本之家4782020-04-20
  • RubyRuby環(huán)境下安裝使用bundler來(lái)管理多版本的gem

    Ruby環(huán)境下安裝使用bundler來(lái)管理多版本的gem

    這篇文章主要介紹了Ruby環(huán)境下安裝使用bundler來(lái)管理多版本的gem的方法,舉了Ruby On Rails中的應(yīng)用實(shí)例來(lái)進(jìn)行演示,需要的朋友可以參考下 ...

    日拱一卒4332020-05-10
  • RubyRuby進(jìn)行文件信息輸出實(shí)例代碼

    Ruby進(jìn)行文件信息輸出實(shí)例代碼

    Ruby進(jìn)行文件信息輸出實(shí)例代碼,數(shù)據(jù)是隨機(jī)的,所以每次的記錄都會(huì)不同。 ...

    ruby教程網(wǎng)2962020-04-10
  • RubyCentOS中配置Ruby on Rails環(huán)境

    CentOS中配置Ruby on Rails環(huán)境

    經(jīng)過(guò)一個(gè)上午的折騰,終于把ROR環(huán)境在CentOS中搞定,繞了很多彎路,把文章寫下來(lái)總結(jié)一下 ...

    可樂(lè)加糖4762020-04-12
主站蜘蛛池模板: 日本免费一区二区三区四区 | 探花av在线| 国产在线观看一区 | 日日摸夜夜添夜夜添高潮视频 | 免费黄色在线观看 | 亚洲精品片 | 久久久久久国产精品mv | 亚洲啪啪| 成年免费视频 | 一区二区三区四区国产 | av中文字幕免费在线观看 | 久久99这里只有精品 | 久久久久中文 | 成人在线二区 | 99久久夜色精品国产亚洲1000部 | 久久久久综合 | 在线欧美视频 | 久久久一区二区三区 | 色网在线观看 | 久久久91精品国产一区二区三区 | 日韩精品一区二区在线观看 | 亚洲一区视频 | 国产婷婷精品 | 国内精品视频 | 一二三区av | 精品久久久久久久久久 | 91夜夜操| 自拍偷拍亚洲 | 国产欧美日韩一级大片 | 成人av在线网 | 转生成为史莱姆这档事第四季在线观看 | 亚洲视频综合 | 毛片网站大全 | 精品国产乱码久久久久久影片 | 91精品国产高清一区二区三区 | 男人天堂a| 蜜桃成人在线观看 | 日韩欧美网站 | 免费无遮挡www小视频 | 久久久久久久久久久九 | 久久精品视频免费观看 |