男人眼淚中的Ruby(三)

2021-09-05 16:00:41 字數 3138 閱讀 6616

今天原本平穩的心情被一些事情所觸動,深埋的東西被拔起的感覺總是痛痛的,不提太多了,還是專心寫文章吧。說說今天這篇文章的關鍵字,看看有沒有你能有用的: class hierarchies ,accessors,attributes,class variables。說白了今天就是deep in ruby class了,不過這個 deep 不夠 deep,只是在我個人的膚淺之上的deep。

仔細說說,看完了ruby的語法書,發現了ruby居然沒有提供介面這個語法,而是用乙個module來取代了,這也就是說ruby沒有實現多繼承,也就是只能有乙個父類,然後可以有多個子類。only one superclass and many subclass。下面看看ruby類麵類繼承的語法:

class man

def initialize(aname,aage)

@name=aname

@age=aage

enddef get_name

return @name

enddef get_age

return @age

enddef to_s

return 'good!!!'

endendclass supermandef initialize(aname,aage,apower)

super(aname,aage)

@power=apower

enddef get_power

return @power

enddef set_power

return @power

endendsupermanabc=superman.new('jesse',21,100)

puts (supermanabc.get_power)

puts(supermanabc.inspect)

這個裡面我們可以看到從類繼承的語法就是乙個《符號,很簡潔。看了**總是很清晰,只需要點一下就是那個super()訪問超類,也就是subclass 呼叫superclass的建構函式了。 

我們在寫ruby的class的屬性的時候如果總是寫get_power和set_power這樣的函式,對這個屬性操作的時候還都是要class.get_power之類感覺很麻煩,我們能不能把它整成直接這樣訪問 class.power=x,那樣不是很爽啊。下面看看**,了解一下ruby的accessor方法:

class supermandef initialize(aname,aage,apower)

super(aname,aage)

@power=apower

enddef power

return @power

enddef power=(apower)

@power=apower

endendsupermanabc=superman.new('jesse',21,100)

supermanabc.power=98

puts (supermanabc.power)

puts(supermanabc.inspect)

改造了一下上面的superman類,然後定義了power的accessor,很明顯語法,不用抽出來講了。不過感覺對於每個屬性如果還是這樣寫的話也是比較麻煩,繼續簡化,整出下乙個主角 attribute reader和writer標籤。看看下面的**:

class supermandef initialize(aname,aage,apower)

super(aname,aage)

@power=apower

endend

更加簡化了吧,其實還可以更加簡化,繼續給出**:

class supermandef initialize(aname,aage,apower)

super(aname,aage)

@power=apower

endend

乙個標籤就搞定了,其實個人比較推薦上面的attr_reader和attr_writer,因為你可以用def power這種方法的從在方便的對屬性進行處理後在返回,看看下面的**你就有所體會了:

class man

attr_writer:name

def initialize(aname,aage)

@name=aname

@age=aage

enddef name

return @name.capitalize

endendsuperman=man.new("jesse",21)

puts(superman.name)

這裡的@name.capitalize是把這個屬性值的首字母大寫了輸出。感覺這樣更靈活一些,在靈活和方便的找到了乙個折中。下面來說說class variables,這個是在所有的類的例項之間共享的乙個變數。下面看看**:

class man

attr_writer:name

@@man_name=0

def initialize(aname,aage)

@name=aname

@age=aage

@@man_name+=1

enddef name

return @name.capitalize

enddef get_man_name

return @@man_name

endendsuperman=man.new("jesse",21)

superman1=man.new("jesse1",22)

superman2=man.new("jesse2",22)

puts superman.get_man_name

puts superman1.get_man_name

puts superman2.get_man_name

class variables的語法為@@varname。程式執行輸出的結果都是3,這就說明他們之間是共享的。這個東西在有些地方很有用,大家多考慮考慮。

今天就寫到這裡吧。明天講講 hash 和 array 的內容。順便說一下我們宿舍的小八也戀愛了,祝福他們。呵呵,不知道怎麼搞得,心裡突然很失落。也許我的愛情觀改變了...

ps: 今天看完了《a little book of ruby》 和 《ruby on rails:up and running》這兩本書,大強度的英語閱讀下感覺慢慢的還是可以習慣英文閱讀的。今天做個決定,以後技術書籍只要有英文版本盡量去看英文版。

《一公升的眼淚》中經典語錄

1 沒什麼特別的,只是被特別的病魔纏上而已。乙個少女的日記 2 以花喻花蕾般的我的人生,想要不遺悔恨地珍惜這青春的始端 3 病魔為什麼選擇了我 病魔 為什麼選擇了我,命運這樣的字眼,讓人不能接受哦 4 二人的孤獨 想要做出時間機器回到過去,如果沒有得這種病,戀情也許會成功吧!想要被人緊緊抱住,想的難...

男人睡前的三宜三忌

男人睡前的三宜三忌 睡眠是健康的巨大源泉。男子怎樣才能睡得好呢?首先,要養成按時入睡和起床的良好習慣,遵循睡眠與覺醒相交替的客觀規律。這樣,就能穩定睡眠,避免引起大腦皮層細胞的過度疲勞。嚴格的作息制度對於象睡眠和覺醒這類生理過程來說意義也是很大的。嚴格遵守作息時間能使我們的睡眠和覺醒過程 甚至有可能...

看男人的三種方法

2006.9.20 18 57 女王我個人經驗,看男人可以從三個地方觀察 吃飯 開車 和喝酒。如果看乙個男人順眼,基本上再跟他吃過飯 坐過他開的車,再一起喝過酒,就可以大致抵定我們將來會是 謝謝再聯絡 只是純友誼 或是 期待再相逢 乙個男人可以假裝有禮貌 有風度 裝氣勢 耍闊綽 愛吹牛 愛耍帥,但只...