激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

服務器之家 - 腳本之家 - Ruby - Ruby類實例變量、類實例方法和類變量、類方法的區別

Ruby類實例變量、類實例方法和類變量、類方法的區別

2020-04-28 10:23腳本之家 Ruby

這篇文章主要介紹了Ruby類實例變量、類實例方法和類變量、類方法的區別,本文探討一下他們的定義和基本的使用場景,需要的朋友可以參考下

在Ruby中類實例變量、類實例方法和類變量、類方法的區別比較微妙,而且用法也有相當的區別。本文探討一下他們的定義和基本的使用場景,以拋磚引玉...
 
一.類實例變量和類變量
 
類變量大家都很熟悉了,就是在類定義中用@@開頭的變量。類變量是用于存儲類的全局信息,它只屬于類,不同與類實例變量(即用@開頭定義的變量)每一個類的對象都有一份數據。 類變量是可以被繼承的,也就是說如果我們派生一個子類,那么在子類中是可以訪問父類的類變量的。子類和父類共享一份數據,對一個類的修改會反映到另一個類中。如下邊的代碼運行結果顯示:

復制代碼 代碼如下:

class A 
   #類變量在訪問前必須賦值,否則會有"uninitialized class variable“ 錯誤 
  @@alpha=123                # Initialize @@alpha 
  @@beta=456                 #Initialize @@beta 
  @@gamma=789              #Initialize @@gamma 
  
  def A.alpha 
    @@alpha 
  end  
  
  def A.alpha=(x) 
    @@alpha=x 
  end 
  
  def A.beta 
    @@beta 
  end 
  
  def A.beta=(x) 
     @@beta=x 
  end  
   
  def A.gamma 
   @@gamma 
  end 
  
  def A.gamma=(x) 
    @@gamma=x 
  end  
  def A.look 
    puts "#@@alpha, #@@beta, #@@gamma" 
  end 
  end 
 
 
class B<A   
end 
 
#初始的數據 
A.look 
B.look 
 
#修改父類中的類變量 
A.alpha=111 
A.look 
B.look 

 
 
運行結果: 

復制代碼 代碼如下:

123, 456, 789 
123, 456, 789 
111, 456, 789 
111, 456, 789 

 

那么什么是類的類實例變量呢?類的類實例變量是在類的類方法中或方法外邊(不能在實例方法中,那是類的實例變量)以@開頭定義的變量,這樣定義的變量值屬于類對象本身,不能夠被子類繼承。類對象這個說法可能有些讓人疑惑,其實Ruby中的一起都是對象,我們定義的類和Ruby的內置類本身就是元類的對象。因此如果要定義需要和子類共享的類全局數據,使用類變量;但是如果要定義僅供類本身使用的類全局數據可以使用類實例變量。還有一點需要注意的是,和類變量不同的是類實例變量不要求訪問前必須賦值,不賦值它的值就是nil 。我們還是看一個例子,能夠更清楚一點...
 

復制代碼 代碼如下:

class A 
   #類的類實例變量在訪問前可以賦值也可以不賦值,不賦值就是nil 
  @alpha=123              # Initialize @alpha 
  @beta=456                #Initialize @beta 
  @gamma=789             #Initialize @gamma 
  
  def A.alpha 
    @alpha 
  end  
  
  def A.alpha=(x) 
    @alpha=x 
  end 
  
  def A.beta 
    @beta 
  end 
  
  def A.beta=(x) 
     @beta=x 
  end  
   
  def A.gamma 
   @gamma 
  end 
  
  def A.gamma=(x) 
    @gamma=x 
  end  
  def A.look 
    puts "#@alpha, #@beta, #@gamma" 
  end 
  end 
 
 
class B<A   
end 
 
A.look 
B.look 


代碼的運行結果如下:

復制代碼 代碼如下:

123, 456, 789
, ,
nil

延伸 · 閱讀

精彩推薦
  • RubyRuby環境下安裝使用bundler來管理多版本的gem

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

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

    日拱一卒4332020-05-10
  • RubyRuby迭代器的7種技巧分享

    Ruby迭代器的7種技巧分享

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

    腳本之家4782020-04-20
  • Ruby簡要說明Ruby中的迭代器

    簡要說明Ruby中的迭代器

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

    goldensun2772020-04-25
  • RubyRuby設計模式編程中使用Builder建造者模式的實例

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

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

    范孝鵬2192020-05-07
  • RubyCentOS中配置Ruby on Rails環境

    CentOS中配置Ruby on Rails環境

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

    可樂加糖4762020-04-12
  • RubyRuby進行文件信息輸出實例代碼

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

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

    ruby教程網2962020-04-10
  • Ruby剖析 Ruby 訪問控制

    剖析 Ruby 訪問控制

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

    ruby教程網3572020-04-08
  • RubyRuby簡潔學習筆記(一):字符串、數字、類和對象

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

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

    腳本之家2472020-04-20
主站蜘蛛池模板: 久久精品小短片 | 成人爽a毛片免费啪啪红桃视频 | 欧日韩在线视频 | 国产精品视频一区二区三区四区国 | 久久国产28| 中文字幕一区在线观看视频 | 成片免费大全 | 狠狠干狠狠操 | 欧美成人一区免费视频 | 国产亚洲精品网站 | 国产精品一区久久久久 | 国产精品久久久久久久久久三级 | 媚药按摩痉挛w中文字幕 | 97香蕉超级碰碰久久免费软件 | 毛片成人网 | 一级做a爱片性色毛片 | 蜜桃一本色道久久综合亚洲精品冫 | 91成人一区二区三区 | 视频一区国产 | 日韩美女电影 | 精品无码久久久久久国产 | 一区二区三区欧美日韩 | 国产精品自拍99 | 成年人在线视频 | 毛片在线视频在线播放 | 成人免费视频视频在线观看 免费 | 日韩视频不卡 | 87成人免费看片 | 激情国产视频 | 中文字幕在线免费 | 97青青草视频 | 黄色免费入口 | 精品99在线视频 | 日本视频免费观看 | 免费a级毛片大学生免费观看 | 免费网站看v片在线a | 成人久久久久久久久久 | 黄色淫片 | 日韩精品中文字幕一区二区 | 一级做a爰片性色毛片2021 | 午色影院 |