麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Ruby > 正文

在Ruby中查找和執(zhí)行方法

2020-02-24 15:37:51
字體:
供稿:網(wǎng)友

當(dāng)我們編寫模塊的時(shí)候,我們需要或多或少地直接運(yùn)行文件,并且我們也可以執(zhí)行一些方法,但這不適合要求或模塊,那么在Ruby中查找和執(zhí)行方法大家都知道嗎?武林技術(shù)頻道小編帶你學(xué)習(xí)!

當(dāng)調(diào)用一個(gè)方法時(shí),Ruby會(huì)做兩件事。

1.找到這個(gè)方法。這個(gè)方法稱為方法查找。

2.執(zhí)行這個(gè)方法。為了做到這點(diǎn),Ruby需要一個(gè)叫做self的東西。

這樣的一個(gè)過程--發(fā)現(xiàn)一個(gè)方法再執(zhí)行之--在每種面向?qū)ο笳Z言中都會(huì)發(fā)生。不過,對于像Ruby這樣非常動(dòng)態(tài)的語言,深入理解這個(gè)過程顯得尤為重要。你有沒有好奇過一個(gè)方法究竟定義在哪里呢?如果有,那絕對應(yīng)該深入理解方法查找及self。

當(dāng)調(diào)用一個(gè)方法時(shí),Ruby會(huì)在對象的類中查找那個(gè)方法。不過,在給出更復(fù)雜的例子之前,你需要了解兩個(gè)新概念:接收者(receiver)和祖先鏈(ancetors chain)。

接收者就是你調(diào)用方法所在的對象。例如,在my_string.reverse()語句中,my_string就是接收者。

為了理解祖先鏈的概念,可以先來觀察任意一個(gè)Ruby類。想象從一個(gè)類移動(dòng)到它的超類,然后再移動(dòng)到超類的超類,依此類推,直到到達(dá)Object類(所有類的默認(rèn)超類),最后來到BasicObject類(Ruby類體系結(jié)構(gòu)的根節(jié)點(diǎn))。在這個(gè)過程中,你所經(jīng)歷的類路徑就是該類的祖先鏈(祖先鏈中還可以包含模塊)。

既然你已經(jīng)知道什么是接受者及祖先鏈了,就可以用一句話來概括方法查找的過程:為了查找一個(gè)方法,Ruby首先在接受者的類中查找,然后一層層地在祖先鏈中查找,直到找到這個(gè)方法為止。

ruby;">class MyClass  def my_method    my_method()  endend class MySubclass <MyClassend obj = MySubclass.newobj.my_method()              # =>"my_method()"

  當(dāng)調(diào)用my_method()方法時(shí),Ruby會(huì)從接收者obj出發(fā),來到MySubclass類。由于在這里不能找到my_method()方法,Ruby向上來到MyClass類,在那里找到了這個(gè)方法。

如果在這兒也沒找到這個(gè)方法,那么Ruby將會(huì)沿著祖先鏈向上來到Object類和BasicObject類。按照大多數(shù)人畫圖的順序,這種查找行為被稱為"向右一步,再向上"規(guī)則。也就是說,先向右一步來到接收者所在的類,然后沿著祖先鏈向上直到找到給定的方法。

到目前為止,我們只關(guān)注于如何找到方法,現(xiàn)在終于要來看看如何執(zhí)行方法了。

設(shè)想你就是Ruby解釋器。若某個(gè)人調(diào)用了一個(gè)名叫my_method()的方法,你用"向右一步,再向上"的方式找到了這個(gè)方法,你發(fā)現(xiàn)這個(gè)方法定義如下:
?

def my_method  temp = @x +1  my_other_method(temp)    end

  為了執(zhí)行這個(gè)方法,你需要回答兩個(gè)問題。首先,實(shí)例變量@x屬于哪個(gè)對象?其次,你應(yīng)該在哪個(gè)對象上調(diào)用方法my_other_method()?

作為具有智慧的人類(而非愚蠢的計(jì)算機(jī)程序),你很可能憑直覺就能回答這兩個(gè)問題:@x實(shí)例變量和my_other_method()方法都屬于接收者--那個(gè)最初調(diào)用my_method()方法的對象。不過,Ruby可沒有直覺,這對它來說是一個(gè)奢侈的東西。當(dāng)調(diào)用一個(gè)方法時(shí),Ruby需要持有一個(gè)接收者的引用,正是這個(gè)引用的存在,它可以記得哪個(gè)對象是接收者,再用它來執(zhí)行這個(gè)方法。這個(gè)接收者引用也可以為你所用。

以上就是武林技術(shù)頻道給大家介紹的在Ruby中查找和執(zhí)行方法,希望能幫助你,我們還整理了更多專業(yè)的技術(shù)知識(shí),讓你不再為學(xué)習(xí)這方面知識(shí)煩惱。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 国产成人av免费 | 国产一级一区二区三区 | 欧美成人黄色小视频 | 精品中文字幕久久久久四十五十骆 | 国产91久久久久久 | 在线成人精品视频 | 在线观看国产www | 欧美女孩videos | 亚洲精品午夜在线 | 久久精品9| 曰韩毛片 | 毛片免费视频播放 | 国产一区二区二 | 黄色一级片免费观看 | 欧美淫交 | 国产日韩在线 | 国产噜噜噜 | 国产在线看一区 | 蜜桃成品人免费视频 | 成人性视频欧美一区二区三区 | 草妞视频| 久久6国产| 国产午夜精品久久久久久久蜜臀 | 一区二区三区视频播放 | 伊人av影院 | 国产一极毛片 | 毛片午夜 | 特黄一级小说 | 成人aaaaa片毛片按摩 | 91精品中文字幕 | 免费国产羞羞网站视频 | 久久噜噜噜精品国产亚洲综合 | 久久国产精品小视频 | 亚洲成人伊人 | 久久精品视频一区 | 2019天天干夜夜操 | 在线成人影视 | av电影网站在线 | 国产福利视频在线观看 | 黄污在线看| 欧美性受xxx黑人xyx性爽 |