麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > Ruby > 正文

ruby 學(xué)習(xí)筆記(2) 類的基本使用

2020-03-29 12:11:10
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
ruby語(yǔ)言跟c#的一些重要差別在于:
1.ruby是動(dòng)態(tài)語(yǔ)言,c#是靜態(tài)語(yǔ)言--即對(duì)象在new出來(lái)以后,ruby還可以動(dòng)態(tài)給對(duì)象實(shí)例添加一些屬性或方法(javascript也是如此)
2.ruby中刻意弱化了變量類型這個(gè)概念,默認(rèn)情況下變量/方法都不需要聲明具體(返回)類型,但其實(shí)在ruby內(nèi)部,會(huì)自動(dòng)根據(jù)變量的值分配類型。(可以通過(guò) “puts 變量.class“查看)
3.ruby相對(duì)c#來(lái)講,可能有些雷的地方在于:父類中的private成員,居然是可以在子類中使用的!
...其它地方,等學(xué)習(xí)深入了再寫出來(lái)
最后上一段測(cè)試代碼,展示了ruby中類的基本用法:
復(fù)制代碼 代碼如下:

class People #跟javascript這類動(dòng)態(tài)語(yǔ)言一樣,ruby中的類也沒(méi)有public,private這類訪問(wèn)控制標(biāo)識(shí)符

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

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

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

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

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

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

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

end
aPeople = People.new("jimmy");#創(chuàng)建一個(gè)People的實(shí)例
puts aPeople.to_string #調(diào)用to_string方法
#puts aPeople.get_name_size #將報(bào)錯(cuò),因?yàn)樵摲椒ㄊ鼙Wo(hù)
#puts aPeople.test #將報(bào)錯(cuò),因?yàn)樵摲椒ㄊ撬接蟹椒?br /> aPeople.show_name
puts aPeople.name
aPeople.name = "楊俊明" #修改姓名
aPeople.show_name
#再定義一個(gè)子類
class Man < People    
    def initialize(_name)
        super
        @sex = true
    end    

    attr_reader:sex #定義只讀屬性sex

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

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

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

    def call_private_method2(man1)
        man1.test #注意這里:語(yǔ)法檢查雖然可以通過(guò),但是運(yùn)行時(shí)會(huì)提示私有方法無(wú)法調(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本身對(duì)變量沒(méi)有類型概念,但是這樣卻不行,即:在調(diào)用父類的受保護(hù)方法時(shí),其實(shí)是要類型匹配的
puts aMan.class #顯示aMan的類名稱

運(yùn)行結(jié)果如下:
復(fù)制代碼 代碼如下:

>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

作者:菩提樹下的楊過(guò)
出處:http://yjmyzz.cnblogs.com
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产91精品一区二区麻豆亚洲 | 免费中文视频 | 国产精品自在线拍 | 亚洲电影在线观看高清免费 | 国产精品成人亚洲一区二区 | 欧美va亚洲 | 激情91| 色无极影院亚洲 | 中文字幕在线观看1 | 香蕉久久久久久 | 九九热视频这里只有精品 | 美女在线观看视频一区二区 | 新久草在线视频 | 一级毛片电影网 | 亚洲国产精品久久久久 | 免费看黄色一级大片 | 广州毛片 | 精品乱码久久久久 | 又黄又爽免费无遮挡在线观看 | 亚洲一区二区网址 | 黄色毛片a级 | 一级黄色欧美 | 亚洲av一级毛片特黄大片 | 99精品视频在线免费观看 | 成人三级免费电影 | 精品国产一区二区三区久久久狼牙 | 欧美日韩中文字幕在线视频 | 九九热国产视频 | 黄色免费播放网站 | 狠狠干五月天 | 精品一区二区三区中文字幕老牛 | av在线高清观看 | www.99re14.com | 国产黄色录像片 | 一级大黄毛片 | 日韩av电影免费看 | 亚洲电影免费观看国语版 | 久久久久久久黄色片 | 成人短视频在线播放 | 欧美毛片 | 久久久久北条麻妃免费看 |