創(chuàng)建類: class后跟類名,其中類名的首字母必須要大寫。實例化時,通過new方法實例化。在c#中有構造器,構造器與類同名。在ruby中,構造器為initialize方法。當通過new方法實例化一個類對象后,會自動調用initialize方法,把new中的參數(shù)傳遞給initialize方法進行初始化。在c#中的域,在ruby中稱為實例變量,定義時前邊加@前綴,表示是一個實例變量。
復制代碼 代碼如下:
class Customer
def initialize(name,age)
@name,@age=name,age
end
end
c1=Customer.new("Tom",20)
訪問器
實例變量只能通過實例方法來訪問。如果要訪問它們可以提供方法訪問器。在c#中稱為屬性,Java中也是定義方法來表示屬性。
復制代碼 代碼如下:
class Customer
def initialize(name,age)
@name,@age=name,age
end
def name
@name
end
def age
@age
end
end
以上定義了兩個方法x,y,它們可以讀@x,@y實例變量。這就定義了讀屬性方法。如果要進行賦值操作,還要定義寫屬性方法:
復制代碼 代碼如下:
def name=(v)
@name=v
end
def age=(v)
@age=v
end
要注意的是:
復制代碼 代碼如下:
c1=Customer.new("Tom",20)
c1.name="Jhon"
只有在實例中才能這樣使用寫屬性。如果在類中,不能通過name=value這樣來代替@name=value。但可以通過self來這樣使用:self.name=value
Ruby提供了簡化定義屬性方法:attr_reader和attr_accessor。后邊跟符號,會自動創(chuàng)建同名的讀寫屬性。
復制代碼 代碼如下:
class Customer
def initialize(name,age)
@name,@age=name,age
end
attr_reader :name,:age
attr_accessor:name,:age
end
c1=Customer.new("Tom",20)
puts c1.name,c1.age
c1.name="Jhon"
c1.age=30
puts c1.name,c1.age
類變量,常量,類方法
類變量以@@開頭;常量通過[類名+::常量名]進行訪問;類方法在實例方法方法名前加類名。在定義類方法時,可以采用一種方式:
復制代碼 代碼如下:
classself
def 方法
end
end
那么,這個方法就是一個類方法:
復制代碼 代碼如下:
class Customer
def initialize(name,age)
@name,@age=name,age
end
class self
def showName
'ok'
end
end
end
puts Customer.showName
方法的訪問性
public:公有的,默認情況下類中的方法是公有的,可以用在任何地方。構造方法initialize為私有的。
private:私有的,類內部使用的,只能被類或子類的實例方法所調用。只能通過self隱式調用,不能通過一個對象顯示調用。一個私有方法m,只能通過m調用,而不能通過o.m或self.m調用。
protected:受保護的,類內部或子類內部使用的方法。與私有的區(qū)別是:除self隱式調用外,還可以通過該類對象顯示調用。
可以通過以下方法來聲明方法的訪問性:
復制代碼 代碼如下:
#訪問性 private protected public
private
def private_method
puts "private method testing"
end
protected
def protected_method
puts "protected method testing"
end
public:protected_method
工廠方法
使用new方法私有,然后通過類方法創(chuàng)建實例
復制代碼 代碼如下:
class Fruit
private_class_method:new
def Fruit.CreateFruit
new Fruit
end
end
f=Fruit.CreateFruit
模塊module
module作用之一是做為名字空間用。調用類時與調用常量相同:兩個冒號
另一作用是作為混入。通過include把模塊中的實例方法包含到其它類中。感覺功能像C#中的名字空間引入。
您可能感興趣的文章:- 使用Ruby on Rails和PostgreSQL自動生成UUID的教程
- 簡單介紹Ruby on Rails對PostgreSQL數(shù)組類型的支持
- 詳解Ruby當中的算數(shù)運算