日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ruby中的self

發布時間:2023/12/2 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ruby中的self 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

self,自己,在ruby中表示當前對象或默認對象。程序執行的任一時刻,有且僅有一個self。

?

1.誰成為self,在什么位置成為self?

要知道哪個對象是self,就必須知道當前的上下文。上下文主要有頂層上下文,類定義上下文,模塊定義上下文,方法定義上下文。可以根據下圖總結的內容進行self的判斷。

上下文  例子哪個對象是self
頂層在任何定義塊之外的代碼main(內建的默認頂層對象)
類定義class C類對象C
模塊定義module M  模塊對象M
方法定義

1 頂層方法

def method_name

?

2實例方法定義

class C

  def method_name

?

3模塊中的實例方法定義

module M

def method_name

?

4單例方法(包括類方法)

def obj.method_name

main(內建的默認頂層對象)

?

?

C的一個實例對象,這個實例對象響應method_name方法調用

?

?

?

(1)用M擴展的單個對象

(2)混含了M的類的一個對象實例

?

?

obj

?

1.1頂層中的self

頂層上下文的self是main,頂層方法的self也是main。main是object的一個對象。

?

1.2類和模塊中定義中的self

類中的self是類對象本身

類中實例方法的對象是實例對象

模塊的self是模塊的名字

?

1.3單例方法中的self

obj作為對象,它的單例方法中的self就是obj。

?

2.self作為消息的默認接接收者

方法調用一般是obj.method的方式,用一個圓點標記,左邊是接收者,右邊是方法。但是,當接收者是self的時候,可以省略接收者和圓點。ruby將self當做默認的接收者,意味著你發送的消息會發給self。即method等價于self.method。

類方法中調用了hello。等價于self.hello。因為在類中,相當于A.hello,打印出了”hello world“。在類外使用hello時,self是main,沒有這個函數,所以報錯。用A.hello當然是對的。

但是值得注意的是,在調用寫方法(以等號結束的方法)的時候,即使是發送消息給當前的self,也不能省略。例如調用方法venue=,要寫成self.venue ="hello"。如果寫成venue="hello",ruby則將它解釋為對局部變量的賦值。

?

3實例變量和self

ruby中實例變量是以@開頭的變量。值得注意的是,在ruby程序中看到的任何實例變量,都是屬于程序中該位置的當前對象self。

第一個@var是屬于類A的,因此在創建類之后就執行了,打印出hello。方法中的@var是屬于類的實例對象的,因此在創建A的實例對象之后調用方法,打印出world。這兩個@var完全無關。任何對象都可以有實例變量--它的信息和對象狀態的私有存儲處。

轉載于:https://www.cnblogs.com/smallbottle/p/3854116.html

總結

以上是生活随笔為你收集整理的ruby中的self的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。