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

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導航

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

服務器之家 - 腳本之家 - Ruby - ruby 學習筆記(2) 類的基本使用

ruby 學習筆記(2) 類的基本使用

2020-04-12 13:31菩提樹下的楊過 Ruby

ruby 學習筆記(2) 類的基本使用

ruby語言跟c#的一些重要差別在于:
1.ruby是動態(tài)語言,c#是靜態(tài)語言--即對象在new出來以后,ruby還可以動態(tài)給對象實例添加一些屬性或方法(javascript也是如此)
2.ruby中刻意弱化了變量類型這個概念,默認情況下變量/方法都不需要聲明具體(返回)類型,但其實在ruby內(nèi)部,會自動根據(jù)變量的值分配類型。(可以通過 “puts 變量.class“查看)
3.ruby相對c#來講,可能有些雷的地方在于:父類中的private成員,居然是可以在子類中使用的!
...其它地方,等學習深入了再寫出來
最后上一段測試代碼,展示了ruby中類的基本用法:

復制代碼 代碼如下:


class People #跟javascript這類動態(tài)語言一樣,ruby中的類也沒有public,private這類訪問控制標識符

    def initialize(_name) #構(gòu)造函數(shù),名字是固定:initialize
        @name = _name; #約定:類的私有變量以@開頭
    end

    def to_string #類似C#中的做法,這里寫一個ToString方法的ruby版
        "My name is #{@name}" #ruby中方法最后一行的值,會被當作函數(shù)值返回
    end

    def get_name_size
        return @name.length #這個方法中返回的是數(shù)字型(即名稱的長度)
    end

    def test #類定義的最后部分,把這個方法標記為私有方法了
        puts "private method(test) in People."
    end

    def show_name
        test #私有方法,可在內(nèi)部調(diào)用
        puts "name = #{@name}"
    end

    attr_accessor:name #定義一個可讀寫的屬性,這里也體現(xiàn)了ruby的一個重要思想:約定重于規(guī)范,因為@name在之前已經(jīng)使用過,這里的屬性只需要把@去掉,ruby就會自動智能的生成類似c#中 set{value = @name},get{return @name}的語句

    private:test #標明test方法是private屬性的
    protected:get_name_size #標明get_name_size只能在本類或子類定義中使用(或者在子類定義中賦值給子類實例)

end
aPeople = People.new("jimmy");#創(chuàng)建一個People的實例
puts aPeople.to_string #調(diào)用to_string方法
#puts aPeople.get_name_size #將報錯,因為該方法受保護
#puts aPeople.test #將報錯,因為該方法是私有方法
aPeople.show_name
puts aPeople.name
aPeople.name = "楊俊明" #修改姓名
aPeople.show_name
#再定義一個子類
class Man < People    
    def initialize(_name)
        super
        @sex = true
    end    

    attr_reader:sex #定義只讀屬性sex

    def call_protected_method
        puts get_name_size #調(diào)用父類的受保護方法
    end

    def call_protected_method2(man1)
        puts man1.get_name_size #注意這里:這里可以把父類的受保護方法,動態(tài)添加到子類實例
    end

    def call_private_method #子類可以調(diào)用父類的私有方法!!! 這一點剛開始很不習慣
        test
    end

    def call_private_method2(man1)
        man1.test #注意這里:語法檢查雖然可以通過,但是運行時會提示私有方法無法調(diào)用,這也是private與protected的區(qū)別
    end

    
end
puts "******************************"
aMan = Man.new("jimmy.yang");
aMan.show_name
aMan.call_protected_method
puts aMan.sex
aMan.call_private_method
aMan2 = Man.new("Mike")
aMan.call_protected_method2(aMan2);
#aMan.call_private_method2(aMan2);
a = "abc";
#aMan.call_protected_method2(a); #雖然ruby本身對變量沒有類型概念,但是這樣卻不行,即:在調(diào)用父類的受保護方法時,其實是要類型匹配的
puts aMan.class #顯示aMan的類名稱


運行結(jié)果如下:

復制代碼 代碼如下:


>ruby classDemo.rb
My name is jimmy
private method(test) in People.
name = jimmy
jimmy
private method(test) in People.
name = 楊俊明
******************************
private method(test) in People.
name = jimmy.yang
10
true
private method(test) in People.
4
Man
>Exit code: 0


作者:菩提樹下的楊過
出處:http://yjmyzz.cnblogs.com

延伸 · 閱讀

精彩推薦
  • Ruby剖析 Ruby 訪問控制

    剖析 Ruby 訪問控制

    前面,我們說 Ruby 沒有函數(shù),只有方法.而且實際上有不止一種方法.這一節(jié)我們介紹 訪問控制 (accesscontrols). 想想當我們在最高層而不是在一個類的定義里定義...

    ruby教程網(wǎng)3572020-04-08
  • Ruby簡要說明Ruby中的迭代器

    簡要說明Ruby中的迭代器

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

    goldensun2772020-04-25
  • RubyRuby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼

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

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

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

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

    日拱一卒4332020-05-10
  • RubyRuby迭代器的7種技巧分享

    Ruby迭代器的7種技巧分享

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

    腳本之家4782020-04-20
  • RubyRuby簡潔學習筆記(一):字符串、數(shù)字、類和對象

    Ruby簡潔學習筆記(一):字符串、數(shù)字、類和對象

    這篇文章主要介紹了Ruby簡潔學習筆記(一):字符串、數(shù)字、類和對象,本文是學習筆記第一篇,需要的朋友可以參考下 ...

    腳本之家2472020-04-20
  • RubyCentOS中配置Ruby on Rails環(huán)境

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

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

    可樂加糖4762020-04-12
  • RubyRuby設計模式編程中使用Builder建造者模式的實例

    Ruby設計模式編程中使用Builder建造者模式的實例

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

    范孝鵬2192020-05-07
主站蜘蛛池模板: 羞羞视频免费观 | 欧美日韩精品一区二区三区高清视频 | 久久精品视在线观看85 | bbc japanese黑人强行 | 欧美艳星kagneyiynn高清 | 日本高清中文 | 9999视频 | 国产亚洲综合成人91精品 | 欧美老人与小伙子性生交 | 亚洲视频在线免费看 | 国产精品热久久毛片 | 护士让我吃奶我扒她奶 | www.尤物| 欧美最猛性xxxxx男男 | 双性np玩烂了np欲之国的太子 | xxxxyoujizz护士| 亚欧美综合| 男人天堂网www | 黄动漫车车好快的车车双女主 | 成人精品第一区二区三区 | 免费视频网 | 国产高清一区二区三区免费视频 | 视频在线91| 色老板视频 | 日本成日本片人免费 | 国产亚洲精品看片在线观看 | caopren免费视频国产 | tube62hdxxxx日本| 双性小说肉 | 精品国产综合区久久久久久 | 亚洲天堂视频在线观看免费 | 三年片韩国在线观看 | 国产成人精品高清在线观看99 | 视频一区二区国产 | 91大神在线精品播放 | 四虎永久在线精品国产馆v视影院 | 男人狂躁女人下面狂叫图片 | 国产另类视频一区二区三区 | 人与动人物性行为zozo共患病 | avtt天堂网 手机资源 | 美女张开双腿让男人捅 |