等待今天宿舍的小八提出來要考 DBA ,這個勾起了我的思緒。To be a DBA or to be a Programmer it's a questions。其實我個人比較傾向去做程式設計,可是綜合考慮到我的性格,感覺自己做DBA更合適一點。下午看了一下 Oracle Certified Administrator (OCA)的書,感覺沒有想象中的難,大多是資料庫的維護。可能唯一讓人感覺到難得是要求回到可愛的linux下面(不是必須的),不過還好我有些linux基礎。大家有沒有做資料庫的給我聯絡一下,有些問題想請教。
這幾天忙著鍛煉身體和找些小說調整心理,所以沒有在第一時間寫ruby系列,希望大家原諒。還好現在我的心態好些了。想起了小時候玩的《仙劍奇俠傳》裡面的詩,現在感覺其實還挺好的。
既不回頭,何必不忘。
既然無緣,何須誓言。
今日種種,似水無痕。
明夕何夕,君已陌路。
言歸正傳,下面來看看在 Ruby 裡面如何來定義一個類呢:
class MyClassendob=MyClass.new
上面就是建立一個類並且初始化一個MyClass的類的執行個體ob,文法相當簡單的,其實個人還是比較喜歡在new後面加上(),主要是害怕多了眼暈。實際上即使咱們建立的MyClass是一個空類,但是也不見他是真的 Poor empty。他還有從Object對象繼承下來的屬性和方法啊。這裡也就引入了ruby的類層次模型,所有的類都是從Object繼承下來的,這點還是和大部分物件導向語言一樣的。謝謝他一個比較好玩的方法,就是Class.class方法,告訴別人自己是什麼類。看看下面的代碼:
puts ob.class#=>displays "MyClass"
用class方法可以輸出ob的類名,感覺這個在特定的場合還是有一定用處的。下面讓我們類有些用處,不要只會跟他爹說自己的名字,也要會說些其他的東西。
class MyClass def saysomething puts("Hello") endendob=MyClass.newob.saysomething
這樣就完成一個有用的類的執行個體化和調用了。感覺對ruby的類調用明晰點了吧。下面讓類更活潑一點,除了會說,還要會學,能夠自己接受寫什麼東西,當然還都是函數嘍。
class Bird def set_name(aName) @myname=aName end def get_name return @myname end def talk return 'GiGi' endendbluebird=Bird.newredbird=Bird.newbluebird.set_name('bluebird')redbird.set_name('redbird')puts(bluebird.get_name)puts(redbird.get_name)puts(bluebird.talk)puts(redbird.talk)
這個就是對類的一個基本的初級綜合應用了,類比了一個Bird的動作。不過感覺每次都這樣在初始化一個類之後在用class.set_name()函數是不是很麻煩,可不可以直接用class()來做啊。這裡就引出了下面的主角 Constructors 了。對於對象的初始化函數,在C#之類的都是和類名同名的函數,不過在ruby裡面就不一樣了,有一個專門的函數名字來對應 initialize()。下面看看代碼更好理解:
class Man def initialize(aName,aAge) @name=aName @age=aAge end def get_name return @name end def get_age return @age end def to_s return 'Good!!!' endendsuperman=Man.new('jesse',21)puts(superman.get_name)puts(superman.get_age)puts(superman.to_s)
這裡面的代碼展示了initialize()這個建構函式的使用方法,後面還提到了函數的重載。我重載了to_S函數,來實現自己所謂的toString,感覺更好點。其實有時候感覺動態語言真正的牛逼在於它的動態,反映在反射機制上面了,下面通過一角,看看ruby的反射。輸入下面代碼
superman.inspectp(superman)
看到了下面的這個內容
#<Man:0x28bdb64 @age=21, @name="jesse">
nil
inspect就是ruby對象的自省函數啦。這裡的superman是一個Man類型的執行個體,後面的數字是ruby虛擬機器用的物件識別碼。@age和@name都是這個對象執行個體的值。這裡你可以想到什麼,自己考慮吧。明天在寫了,繼續努力...