Ruby中,類方法和例項方法的乙個有趣的例子

2021-09-08 16:58:16 字數 933 閱讀 2522

最初的**如下:

class object

def abc

p "instance abc"

enddef self.abc

p "class abc"

endendobj=object.new

obj.abc #instance abc

object.abc #class abc

修改一下:

class object

def abc

p "instance abc"

endendobj=object.new

obj.abc #instance abc

object.abc #instance abc

再修改一下:

class object

def self.abc

p "class abc"

endendobj=object.new

obj.abc #error: undefined method 'abc' for ***

object.abc #class abc

究其原因:

1、類方法,是「該類的單例類」的例項方法;

2、object類的單例類的父類是class類,object類同時又是class類的父類:得出結論,object類是它的單例類的父類,也就是說,object類的例項方法,也是它的類方法

3、例項方法的查詢過程只查詢類的繼承層次,而不會查詢單例類

4、補充一下,類的繼承層次,在單例類中被保持住,比如class a < b,則a的單例類也繼承自b的單例類

參見:1、** ruby meta-class - 壞份子 -

2、ruby的物件模型_老王的技術手冊 

Ruby中,類方法和例項方法的乙個有趣的例子

最初的 如下 class object def abc p instance abc enddef self.abc p class abc endendobj object.new obj.abc instance abc object.abc class abc 修改一下 class objec...

關於Ruby中類方法與例項方法呼叫的理解

quote img quote 對此略懂,簡單解答下你的問題,這塊確實是ruby深入理解的關鍵點.首先,要明白一點 ruby一切皆物件.什麼意思呢?ruby乙個類也是乙個物件 使用xx.class知道它的類是class 它也具備方法 即所謂的類方法 這個可以稱之謂元類 metaclass 而ruby...

類方法和例項方法?

筆試中遇到都最最基礎的問題,我竟然有點懵了。首先沒弄清楚什麼是類方法,什麼是例項方法,現在就做乙個總結。類中的方法分為類方法和例項方法。類方法 類中用 static 修飾的方法。例項方法 也稱為物件方法,除了類方法都是例項方法。類方法在類被 jvm 虛擬機器載入進記憶體的時候就會為其分配入口位址,例...