Ruby學習之類中變數的定義和使用
上篇文章呢,我們簡單看了下類和方法以及物件的定義和使用,並且簡單的瞭解了類中的變數的幾種型別,這次我們就來簡單的看一下。
Ruby變數的官方定義就是持有可被任何程式使用的任何資料的儲存位置,它有五種型別:
- 一般小寫字母、下劃線開頭:變數(Variable)。
$
開頭:全域性變數(Global variable)。@
開頭:例項變數(Instance variable)。@@
開頭:類變數(Class variable)類變數被共享在整個繼承鏈中- 大寫字母開頭:常數(Constant)。
咱們先來看下全域性變數,它是以 $ 開頭,未初始化的全域性變數的值為 nil
#!/usr/bin/ruby # -*- coding: UTF-8 -*- $global = 10 class Class1 def print_global puts "全域性變數在 Class1 中輸出為 #$global" end end class Class2 def print_global puts "全域性變數在 Class2 中輸出為 #$global" end end class1obj = Class1.new class1obj.print_global class2obj = Class2.new class2obj.print_global
上述程式碼中的$global就是全域性變數。
咱們再來看下例項變數,它是以 @ 開頭,如果未初始化的例項變數的值為 nil,在使用 -w 選項後,會產生警告,來看下用法:
#!/usr/bin/ruby class Lu def initialize(id, name, sex) @lu_id=id @lu_name=name @lu_addr=sex end def display_details() puts "人物 id: #@lu_id" #輸出資訊方式 puts "人物 name: #@lu_name" puts "人物 sex: #@lu_addr" end end # 建立物件 luyaran = Lu.new("1","luyaran","girl") cuijinpeng = Lu.new("2","cuijinpeng","boy") # 呼叫方法 luyaran.display_details() cuijinpeng.display_details()
上述程式碼中的@lu_id、@lu_name、@lu_addr都是例項變數。
接下來看下類變數,它是以 @@ 開頭且必須初始化後才能在方法定義中使用,如果引用一個未初始化的類變數會產生錯誤,類變數在定義它的類或模組的子類或子模組中可共享使用,我們在使用 -w 選項後,過載類變數會產生警告,來看下用法:
#!/usr/bin/ruby
class Lu
@@num_person=0
def initialize(id, name, sex)
@lu_id=id
@lu_name=name
@lu_addr=sex
end
def display_details()
puts "人物 id: #@lu_id" #輸出資訊方式
puts "人物 name: #@lu_name"
puts "人物 sex: #@lu_addr"
end
def total_no_of_customers()
@@num_person += 1
puts "人物數量: #@@num_person"
end
end
# 建立物件
luyaran = Lu.new("1","luyaran","girl")
cuijinpeng = Lu.new("2","cuijinpeng","boy")
# 呼叫方法
luyaran.display_details()
luyaran.total_no_of_customers()
cuijinpeng.display_details()
cuijinpeng.total_no_of_customers()
上述程式碼中的@@num_person,就算是類變數。
咱們再來看區域性變數,它是以小寫字母或下劃線 _ 開頭,作用域從 class、module、def 或 do 到相對應的結尾或者從左大括號到右大括號 {},當我們呼叫一個未初始化的區域性變數時,它被解釋為呼叫一個不帶引數的方法,我們對未初始化的區域性變數賦值也可以當作是變數宣告,並且它會一直存在,直到當前域結束為止,它的生命週期在 Ruby 解析程式時確定,來看下例項:
#!/usr/bin/ruby
class Lu
@@num_person=0
def initialize(id, name, sex)
@lu_id=id
@lu_name=name
@lu_addr=sex
end
def display_details()
puts "人物 id: #@lu_id" #輸出資訊方式
puts "人物 name: #@lu_name"
puts "人物 sex: #@lu_addr"
end
def total_no_of_customers()
@@num_person += 1
puts "人物數量: #@@num_person"
end
end
# 建立物件
luyaran = Lu.new("1","luyaran","girl")
cuijinpeng = Lu.new("2","cuijinpeng","boy")
# 呼叫方法
luyaran.display_details()
luyaran.total_no_of_customers()
cuijinpeng.display_details()
cuijinpeng.total_no_of_customers()
上述例項中的id, name, sex就算是區域性變數。
還有就是常量,它以大寫字母開頭,並且定義在類或模組內的常量可以從類或模組的內部訪問,定義在類或模組外的常量可以被全域性訪問,它不能定義在方法內,我們引用一個未初始化的常量會產生錯誤,對已經初始化的常量賦值會產生警告,來看下用法:
#!/usr/bin/ruby
class Test
VAR1 = 1
VAR2 = 2
def show
puts "第一個常量的值為 #{VAR1}"
puts "第二個常量的值為 #{VAR2}"
end
end
# 建立物件
object=Example.new()
object.show
上述程式碼的VAR1 和 VAR2 是常量。
最後來看下Ruby中的偽變數,它可以看做是特殊的變數,有著區域性變數的外觀,但行為卻像常量,我們不能給它們賦值,來看下列表:
- self: 當前方法的接收器物件。
- true: 代表 true 的值。
- false: 代表 false 的值。
- nil: 代表 undefined 的值。
- __FILE__: 當前原始檔的名稱。
- __LINE__: 當前行在原始檔中的編號。
好啦,本次記錄就到這裡了。
如果感覺不錯的話,請多多點贊支援哦。。。