在ruby裡所有的東西都是例項, 包括類

2021-08-22 18:26:10 字數 888 閱讀 1299

在ruby裡,每乙個類都有乙個metaclass。除了metaclass之外,所有的object都是instance object.

換言之,在ruby裡,[b]你所有能看見的object都是例項[/b]。

首先,在ruby中,如何知道乙個object是乙個類還是這個類的例項呢?很簡單,如果有object的klass指向它,那麼他就是我們傳統所說的'類', 而如果乙個object的klass指向別人那麼就是傳統所說的'例項'. 為什麼要加傳統呢?因為在ruby裡,乙個object即可以是'類',也可以是'例項'。也就是說既有乙個object的klass指向它,而它的klass又指向別人。所以即使是傳統意義的'類',也是metaclass的例項。而metaclass是不可見的,所以在ruby裡所有的object都是乙個'例項', 只有metaclass才是真正的純'類'。這不禁讓我覺得以往物件導向裡所定義的'類','例項'在ruby面前被扭曲了,甚至覺得詞彙定義的貧乏。

具體的關係可以看下圖:

[img]

知道了這個,那麼就很好理解

class t1

@v1 = 'abc'

def get_v1

return @v1

enddef self.get_v1

return @v1

endend

i1 = t1.new

puts i1.get_v1 #返回空,而不是'abc'

puts t1.get_v1 #這個才是返回'abc'

因為這裡@v1是t1這個例項的變數,而不是ins1這個例項的變數,這是兩個完全不相干的例項,如果我不追加定義self.get_v1的話t1裡根本就沒有get_v1這個方法,所以你呼叫t1.get_v1是錯誤的。

可以放下我所有的東西

那些熟悉的符號是讓我感到久違的親切,可是它代表了什麼,所蘊含的意義 規則等等,現在我都不知道了。時間這東西真讓人感到無奈,曾經的夢想讓時間磨滅的一點痕跡都沒有了一張桌子,一張床,可以放下我所有的東西,我就可以在那裡去尋找自己想要的東西,可以隨意看書 聽 睡懶覺,現實生活很殘酷,就這麼狹小的空間我都不...

C 裡所有的注意事項

c 裡所有的注意事項 1 類成員的訪問許可權 a public 允許外界訪問。b private 不允許外界訪問,也不允許派生類訪問。c protected 不允許外界訪問,但允許派生類訪問。d internal 允許同乙個命名空間中的類訪問。2 在while括號後面不要加分號,因為加分號後,就表示...

C 裡所有的注意事項

1 類成員的訪問許可權 a public 允許外界訪問。b private 不允許外界訪問,也不允許派生類訪問。c protected 不允許外界訪問,但允許派生類訪問。d internal 允許同乙個命名空間中的類訪問。2 在while括號後面不要加分號,因為加分號後,就表示while語句中的迴圈...