最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Ruby中的變量學(xué)習(xí)總結(jié)

 更新時間:2014年11月05日 09:00:54   投稿:junjie  
這篇文章主要介紹了Ruby中的變量學(xué)習(xí)總結(jié),本文詳細(xì)講解了Ruby中的局部變量、實例變量、類變量、全局變量等4種變量類型,并對它們的作用范圍做了總結(jié),需要的朋友可以參考下

Ruby中的變量有幾種形式,分別是局部變量、實例變量、類變量、全局變量,對于初學(xué)者來說,常常容易搞混,尤其像本人這種做java的,理解起來還是頭痛,經(jīng)過仔細(xì)辨別學(xué)習(xí),將這幾種變量的差異及使用場景總結(jié)如下:

一、命名方式

1.局部變量:小寫字母或者“_”開頭,如user,解釋器解釋到時才開始在內(nèi)存中存在,一個良好的習(xí)慣是在進(jìn)行變量定義時用nil進(jìn)行賦值初始化,否則會出現(xiàn)類似undefined local variable or method `z'的錯誤;
2.實例變量:@開頭,如@user,默認(rèn)初始化為nil,此處的“實例”指的是類對象本身,或者類的對象;
3.類變量:@@開頭,如@@user,需要進(jìn)行初始化后才能調(diào)用,否則會出現(xiàn)類似uninitialized class variable @@user in Account的錯誤;
4.全局變量:$開頭,如$user,默認(rèn)初始化為nil;

二、作用范圍

局部變量:如user,只作用于本類、本方法或本模塊內(nèi),不同于java語言習(xí)慣,在類中定義的變量,可以在類的方法中進(jìn)行調(diào)用,Ruby中的局部變量,類中定義的,只能在類中訪問,其子類、方法、內(nèi)部類中都無法調(diào)用,如下邊示例代碼:

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

class Account
 user=User.new
 def myMethod
  puts user.name   #調(diào)用發(fā)生錯誤,user未定義
 end
end

實例變量:如@user,有點類似于java中POJO類的成員變量,類中隨意訪問,類外通過方法訪問,作用于本實例對象范圍內(nèi)或本類的實例對象范圍內(nèi)(這句話有點繞口,請注意分清楚類對象本身[Account,是Class類的一個對象]和 類實例化后的對象[Account.new,是Account類的一個對象]),這是兩個相互獨立的域,定義在Account中的變量不能在Account.new中訪問,反之亦然,如下邊示例代碼:

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

class A 
  #類的類實例變量在訪問前可以賦值也可以不賦值,不賦值就是nil 
  @alpha='This is @alpha\' value!'
 
  def A.look
   puts "#@alpha" 
  end
  def look 
   puts "#@alpha" 
  end
end 

A.look        #輸出:'This is @alpha' value!''
A.new.look    #輸出:''

再看如下代碼:

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

class A 
  #類的類實例變量在訪問前可以賦值也可以不賦值,不賦值就是nil 
  @alpha='This is @alpha\' value!'

  def A.look
   puts "#@alpha" 
  end
  def look
   @alpha='This is @alpha\' value from look!'
   puts "#@alpha" 
  end
  def look_again 
   puts "#@alpha" 
  end
end 

A.look        #輸出:'This is @alpha' value!''
a=A.new
a.look        #輸出:'This is @alpha' value from look!'
a.look_again  #輸出:'This is @alpha' value from look!'

可見,@alpha='This is @alpha\' value!'是定義在類對象本身的實例變量,@alpha='This is @alpha\' value from look!'是定義在類實例化后的對象中的實例變量,另外,使用實例變量時還應(yīng)該注意一下幾點:

1、實例變量不管是在類中定義,還是在方法中定義,其都屬于類,而不是方法
2、實例變量只存在于實例范圍,不可在子類中引用或者賦值
3、實例變量永遠(yuǎn)都是Private的,不能暴露為Public,外部訪問通過方法進(jìn)行,可以使用attr_accessor簡便定義

類變量:如@@user,作用于類的所有范圍,所有實例對象共享,包括子類及其實例對象,類變量通過Protected聲明的,如下邊示例代碼:

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

class A 
  #類的類實例變量在訪問前可以賦值也可以不賦值,不賦值就是nil 
  @@alpha='This is @alpha\' value!'

  def A.look
   puts "#@@alpha" 
  end
  def look
   puts "#@@alpha" 
  end
  def look_again 
   puts "#@@alpha" 
  end
end 

class B<A
end

A.look        #輸出:'This is @alpha' value!'
B.look        #輸出:'This is @alpha' value!'
a=A.new
a.look        #輸出:'This is @alpha' value!'
a.look_again  #輸出:'This is @alpha' value!'
b=B.new
b.look        #輸出:'This is @alpha' value!'
b.look_again  #輸出:'This is @alpha' value!'

全局變量:如$user,盡量少使用 ,作用于整個程序的生命周期,常駐內(nèi)存,過量使用會引起性能下降,內(nèi)存溢出,Ruby內(nèi)置一些全局變量,獲取相關(guān)數(shù)據(jù)十分方便,如$0'代表的是所運行應(yīng)用程序的文件名稱,‘$:'代表的是默認(rèn)的文件搜索路徑;'$$'代表的是 ruby 程序的進(jìn)程 id。

相關(guān)文章

最新評論

香格里拉县| 通城县| 康定县| 涞源县| 陕西省| 额尔古纳市| 亚东县| 和田市| 凤翔县| 桐乡市| 诸暨市| 天等县| 沂源县| 灌南县| 辰溪县| 铜陵市| 翁牛特旗| 德安县| 桂阳县| 吕梁市| 原阳县| 玛多县| 墨竹工卡县| 廉江市| 精河县| 巴彦淖尔市| 金华市| 寻乌县| 浮山县| 浏阳市| 辛集市| 灌云县| 独山县| 仲巴县| 鞍山市| 个旧市| 安泽县| 瓦房店市| 西贡区| 红原县| 石棉县|