Ruby中變量學習總結

Ruby中的變量主要分爲、實例變量、類變量、局部變量、全局變量等4種變量類型

一、命名方式

1.局部變量:小寫字母或者“_”開頭,如user,解釋器解釋到時纔開始在內存中存在,一個良好的習慣是在進行變量定義時用nil進行賦值初始化,否則會出現類似undefined local variable or method `z'的錯誤,變量可以不經定義類型直接使用如:a = 3    b = 2.3 等,解釋器會自動給變量匹配數據類型
2.實例變量:@開頭,如@user,默認初始化爲nil,此處的“實例”指的是類對象本身,或者類的對象;相當JAVA中的屬性,在ruby中實例變量默認都是private的
3.類變量:@@開頭,如@@user,需要進行初始化後才能調用,否則會出現類似uninitialized class variable @@user in Account的錯誤;類變量相當JAVA中的被static修飾的屬性,屬於類本身,所有類的對象共享
4.全局變量:$開頭,如$user,默認初始化爲nil;


二、作用範圍

局部變量:Ruby中的局部變量,類中定義的,只能在類中訪問,其子類、方法、內部類中都無法調用,如下邊示例代碼:

<span style="font-size:14px;">class Account
 user = 3
 def myMethod
  puts user   #調用發生錯誤,user未定義
 end
end</span>

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

<span style="font-size:14px;">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    #輸出:''</span>

<span style="font-size:14px;">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!'</span>

可見@alpha變量的訪問在類是實例化對象和類的定義本身的訪問是互補干預的。需要注意的幾點:

1、實例變量不管是在類中定義,還是在方法中定義,其都屬於類,而不是方法
2、實例變量只存在於實例範圍,不可在子類中引用或者賦值
3、實例變量永遠都是Private的,不能暴露爲Public,外部訪問通過方法進行,可以使用attr_accessor簡便定義,attr_accessor相當於給屬於默認加了get,set方法


類變量:如@@user,作用於類的所有範圍,所有實例對象共享,包括子類及其實例對象,類變量通過Protected聲明的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章