一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類(lèi)導(dǎo)航

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

服務(wù)器之家 - 腳本之家 - Ruby - Ruby基礎(chǔ)知識(shí)之類(lèi)

Ruby基礎(chǔ)知識(shí)之類(lèi)

2020-04-26 10:16腳本之家 Ruby

這篇文章主要介紹了Ruby基礎(chǔ)知識(shí)之類(lèi),本文講解了類(lèi)的創(chuàng)建、訪問(wèn)器、類(lèi)變量、常量、類(lèi)方法、方法的訪問(wèn)性、工廠方法、模塊module等內(nèi)容,需要的朋友可以參考下

創(chuàng)建類(lèi): class后跟類(lèi)名,其中類(lèi)名的首字母必須要大寫(xiě)。實(shí)例化時(shí),通過(guò)new方法實(shí)例化。在c#中有構(gòu)造器,構(gòu)造器與類(lèi)同名。在ruby中,構(gòu)造器為initialize方法。當(dāng)通過(guò)new方法實(shí)例化一個(gè)類(lèi)對(duì)象后,會(huì)自動(dòng)調(diào)用initialize方法,把new中的參數(shù)傳遞給initialize方法進(jìn)行初始化。在c#中的域,在ruby中稱(chēng)為實(shí)例變量,定義時(shí)前邊加@前綴,表示是一個(gè)實(shí)例變量。

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

class Customer
    def initialize(name,age)
      @name,@age=name,age
    end
end
 
c1=Customer.new("Tom",20)


訪問(wèn)器

 

實(shí)例變量只能通過(guò)實(shí)例方法來(lái)訪問(wèn)。如果要訪問(wèn)它們可以提供方法訪問(wèn)器。在c#中稱(chēng)為屬性,Java中也是定義方法來(lái)表示屬性。

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

class Customer
    def initialize(name,age)
      @name,@age=name,age
    end
    
    def name
      @name
    end
    def age
      @age
    end
end


以上定義了兩個(gè)方法x,y,它們可以讀@x,@y實(shí)例變量。這就定義了讀屬性方法。如果要進(jìn)行賦值操作,還要定義寫(xiě)屬性方法:

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

    def name=(v)
      @name=v
    end
    def age=(v)
      @age=v
    end


要注意的是:

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

c1=Customer.new("Tom",20)
c1.name="Jhon"


只有在實(shí)例中才能這樣使用寫(xiě)屬性。如果在類(lèi)中,不能通過(guò)name=value這樣來(lái)代替@name=value。但可以通過(guò)self來(lái)這樣使用:self.name=value
Ruby提供了簡(jiǎn)化定義屬性方法:attr_reader和attr_accessor。后邊跟符號(hào),會(huì)自動(dòng)創(chuàng)建同名的讀寫(xiě)屬性。

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

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


類(lèi)變量,常量,類(lèi)方法
類(lèi)變量以@@開(kāi)頭;常量通過(guò)[類(lèi)名+::常量名]進(jìn)行訪問(wèn);類(lèi)方法在實(shí)例方法方法名前加類(lèi)名。在定義類(lèi)方法時(shí),可以采用一種方式:

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

class<<self
       def 方法
       end
end


那么,這個(gè)方法就是一個(gè)類(lèi)方法:

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

class Customer
    def initialize(name,age)
      @name,@age=name,age
    end
    class <<self
      def showName
        'ok'
      end
    end
end
 
puts Customer.showName


方法的訪問(wèn)性
public:公有的,默認(rèn)情況下類(lèi)中的方法是公有的,可以用在任何地方。構(gòu)造方法initialize為私有的。
private:私有的,類(lèi)內(nèi)部使用的,只能被類(lèi)或子類(lèi)的實(shí)例方法所調(diào)用。只能通過(guò)self隱式調(diào)用,不能通過(guò)一個(gè)對(duì)象顯示調(diào)用。一個(gè)私有方法m,只能通過(guò)m調(diào)用,而不能通過(guò)o.m或self.m調(diào)用。
protected:受保護(hù)的,類(lèi)內(nèi)部或子類(lèi)內(nèi)部使用的方法。與私有的區(qū)別是:除self隱式調(diào)用外,還可以通過(guò)該類(lèi)對(duì)象顯示調(diào)用。
可以通過(guò)以下方法來(lái)聲明方法的訪問(wèn)性:

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

#訪問(wèn)性 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方法私有,然后通過(guò)類(lèi)方法創(chuàng)建實(shí)例

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

class Fruit
  private_class_method:new
  def Fruit.CreateFruit
    new Fruit
  end
end
f=Fruit.CreateFruit


模塊module

 

module作用之一是做為名字空間用。調(diào)用類(lèi)時(shí)與調(diào)用常量相同:兩個(gè)冒號(hào)
另一作用是作為混入。通過(guò)include把模塊中的實(shí)例方法包含到其它類(lèi)中。感覺(jué)功能像C#中的名字空間引入。

延伸 · 閱讀

精彩推薦
  • RubyCentOS中配置Ruby on Rails環(huán)境

    CentOS中配置Ruby on Rails環(huán)境

    經(jīng)過(guò)一個(gè)上午的折騰,終于把ROR環(huán)境在CentOS中搞定,繞了很多彎路,把文章寫(xiě)下來(lái)總結(jié)一下 ...

    可樂(lè)加糖4762020-04-12
  • RubyRuby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例

    Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例

    這篇文章主要介紹了Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例,建造者模式將一個(gè)復(fù)雜對(duì)象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表...

    范孝鵬2192020-05-07
  • RubyRuby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類(lèi)和對(duì)象

    Ruby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類(lèi)和對(duì)象

    這篇文章主要介紹了Ruby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類(lèi)和對(duì)象,本文是學(xué)習(xí)筆記第一篇,需要的朋友可以參考下 ...

    腳本之家2472020-04-20
  • Ruby簡(jiǎn)要說(shuō)明Ruby中的迭代器

    簡(jiǎn)要說(shuō)明Ruby中的迭代器

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

    goldensun2772020-04-25
  • Ruby剖析 Ruby 訪問(wèn)控制

    剖析 Ruby 訪問(wèn)控制

    前面,我們說(shuō) Ruby 沒(méi)有函數(shù),只有方法.而且實(shí)際上有不止一種方法.這一節(jié)我們介紹 訪問(wèn)控制 (accesscontrols). 想想當(dāng)我們?cè)谧罡邔佣皇窃谝粋€(gè)類(lèi)的定義里定義...

    ruby教程網(wǎng)3572020-04-08
  • RubyRuby迭代器的7種技巧分享

    Ruby迭代器的7種技巧分享

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

    腳本之家4782020-04-20
  • RubyRuby進(jìn)行文件信息輸出實(shí)例代碼

    Ruby進(jìn)行文件信息輸出實(shí)例代碼

    Ruby進(jìn)行文件信息輸出實(shí)例代碼,數(shù)據(jù)是隨機(jī)的,所以每次的記錄都會(huì)不同。 ...

    ruby教程網(wǎng)2962020-04-10
  • RubyRuby環(huán)境下安裝使用bundler來(lái)管理多版本的gem

    Ruby環(huán)境下安裝使用bundler來(lái)管理多版本的gem

    這篇文章主要介紹了Ruby環(huán)境下安裝使用bundler來(lái)管理多版本的gem的方法,舉了Ruby On Rails中的應(yīng)用實(shí)例來(lái)進(jìn)行演示,需要的朋友可以參考下 ...

    日拱一卒4332020-05-10
主站蜘蛛池模板: 久久AV国产麻豆HD真实乱 | 国产盗摄wc女厕所 | 色综久久天天综合绕视看 | 美女舒服好紧太爽了视频 | 国产大片51精品免费观看 | 我将她侵犯1~6樱花动漫在线看 | 国内精品国语自产拍在线观看55 | 好爽好紧小雪别夹小说 | 成人综合婷婷国产精品久久免费 | 日本中文字幕在线视频站 | 被夫上司侵犯了中文字幕 | aⅴ天堂小视频 | 日韩免费在线视频观看 | 国产成人免费片在线视频观看 | 亚洲高清中文字幕一区二区三区 | 动漫美女被褥吸奶漫画漫画 | 韩国一区二区三区 | 超级乱淫伦小说1女多男 | aaa大片 | 韩国一级淫片特黄特刺激 | 久久精品国产久精国产果冻传媒 | 天仙tv微福视频 | acg火影忍者熟密姬纲手h | 欧美一级片免费在线观看 | 草草草视频在线观看 | 精品欧美一区二区在线观看欧美熟 | 好湿好紧太硬了我好爽 | 好大用力深一点女公交车 | 免费观看欧美成人h | 国产成人精品免费视频大全五级 | 青草精品 | 农村妇女野外牲交一级毛片 | 第一国内永久免费福利视频 | 男人的天堂视频在线 | 欧美日韩高清完整版在线观看免费 | 车上小婕子系列辣文小说 | 第一国内永久免费福利视频 | 欧美最猛性xxxxx短视频 | 天天干天天色综合网 | 华人在线京东热 | 啪啪链接 |