国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > Ruby > 正文

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

2020-10-29 19:40:57
字體:
來源:轉載
供稿:網友

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方法中的值進行緩存。
(關于閉包,可以查看相關文檔,我這里只是粗淺的認識。)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产二区三区在线| 国产精品178页| 国产成人亚洲精品播放器下载| 激情亚洲综合网| 99色在线视频| 国产www网站| h网址在线观看| 国产乱人视频免费播放| 国产精品久久久高清免费| 97操碰视频| 激情综合网五月激情| 国产精品美女一区二区视频| 亚洲欧美自拍另类| 尤物视频免费在线观看| 91九色在线看| 亚洲视频在线网| 午夜免费视频在线国产| 91午夜在线| 中文字幕乱在线伦视频乱在线伦视频| 国产黄色免费| 激情丁香婷婷| 日本成人在线播放| 国产成人夜间影院在线观看| 欧美成人亚洲高清在线观看| 2018中文字幕在线| 国产一级免费在线观看| 美女被人操视频在线观看| 2018中文字幕在线| 天天操夜夜摸| 国产在线中文字幕| 在线观看免费黄色| 国产精品视频一区二区免费不卡 | 国产一级黄色片免费| 中文av字幕| 国产精品视频一区二区图片| 激情丁香久久| 欧美日韩**字幕一区| 香蕉视频免费在线播放| 国产精品yjizz视频网一二区 | 夜夜操com| 国产寡妇树林野战在线播放| 国产农村一级特黄α**毛片| www.xxx黄| 男女羞羞视频在线观看| 色中文字幕在线| 日本精品一区二区三区在线播放| 亚洲图区欧美| 欧美日韩国产亚洲沙发| 青青草原av在线| 99在线免费视频| 中文岛国精品亚洲一区| 中文字幕av在线播放| 亚洲精品影院在线| 青青草免费在线视频| 国产在线小视频| 国产亚洲精品午夜高清影院| 中文字幕免费在线视频| 国产精品理人伦一区二区三区 | 最近中文字幕av免费高清 | 国产一区二区在线|播放| 国产丝袜在线播放| 91最新在线| 免费不卡中文字幕视频| 中文字幕麻豆| 99中文字幕一区| 久久精品无码一区二区日韩av | 91精品专区| wwww在线观看| 国产精品xxx电影| 欧美日韩亚洲国内综合网| 成人免费一区二区三区牛牛| 国产精品欧美色图| 久草.com| 午夜亚洲成人| 中文字幕网站视频在线| 青青国产在线| 午夜在线网站| aaa大片在线观看| 国产系列在线观看| 麻豆精品传媒视频观看| 国产对白叫床清晰在线播放| 久久久久久五月天久久久久久久久| 国产三区视频在线观看| 久热中文字幕精品视频在线| 在线欧美一级视频| 国产天堂视频| 日本中文字幕视频| 青青草在线免费观看| av激情在线| 国产精品冒白浆免费视频| 国产女人伦码一区二区三区不卡| 亚洲精品在线播放视频| 伊人精品影院| 99在线视频观看| 精灵使的剑舞无删减版在线观看| 国产精品视频流白浆免费视频| 丁香视频免费观看| 日本高清不卡中文字幕| 欧美精品小视频| 超碰国产在线| 天堂中文在线视频| 国产精品视频一区二区免费不卡| 天堂资源在线中文| 最近免费中文字幕在线第一页| 四虎免费播放| 青青草视频在线观看| 欧美色第一页| 中文字幕一区免费| 69堂视频在线观看国产| 在线播放国产区| 毛片在线视频| 国产小视频在线观看| 国产区视频在线播放| 国产黄a三级三级三级av在线看 | 激情视频国产| 国产农村av| 18成年在线观看| 亚洲成人福利| 国产精品自产拍在线网站| 国产精品四虎| www.九九热.com| 天堂资源最新版在线视频观看免费网| 国产另类图片| 伊人中文在线| 日本中文字幕高清视频| 在线欧美一级视频| 国产在线视频自拍| 2019中文字幕在线视频| 麻豆网站在线免费观看| 国产在线更新| av在线你懂的| 国产精品久久精品牛牛影视| yjizz视频网站在线播放| 国产私人尤物无码不卡| 免费在线黄色av| 国产99在线|亚洲| 国产乱视频在线观看| 在线观看的网站你懂的| 国产写真视频在线观看| 久久国产精品黑丝| 亚洲电影视频在线| 中文字幕第一页在线| 久草在线视频网| 在线观看中文字幕一区| 中中文字幕av在线| 超碰国产在线观看| h网站久久久| 91中文在线| 国产成a人亚洲精v品| 国产一级二级在线| 中文字幕免费中文| 最近中文字幕在线中文视频| 蜜桃av网站| 热99re久久精品这里都是免费| 国产高清视频免费最新在线| 国产裸舞福利在线视频合集| 麻豆电影传媒二区| 久久亚洲天堂| 高清视频一区二区三区四区| 亚洲精品国自产拍在线观看| 18被视频免费观看视频| 国产黄a三级三级三级av在线看| 国产素人视频在线观看| 国产精品白浆流出视频| 国产黄色免费看| 国产二区三区四区| 18成年在线观看| 99热99re6国产在线播放| 在线观看wwww| 蜜桃视频网站在线| 国产午夜三区视频在线| 1区2区视频| 99精品老司机免费视频| 四虎国产精品永久在线| 亚洲xxxxxx| 日本中文字幕在线播放| 国产二区在线播放| 超碰97在线免费观看| 丁香六月婷婷| 97视频免费| 国产在线观看a视频| 国产黄色av免费看| 欧美人成在线观看网站高清| 午夜国产在线| 在线黄色.com| 最近中文字幕mv2018在线高清| 18av在线播放| 国产中文字幕在线观看| 91高清国产| 天天插天天射| 国产九色porn网址| 亚洲网站一区| 国产一级在线观看| 天海翼中文字幕| 国产野外战在线播放| 欧洲有码在线视频| 在线免费看黄| 国产区在线观看| 男女午夜视频在线观看| 精品欧美不卡一区二区在线观看|