2017-04-23 67 views
2

我試圖在學術上的原因在Ruby中實現case_class。 我已經閱讀了這個問題Redefining "class" keyword in Rubyruby​​中的案例類

我有麻煩理解爲什麼def case_class在模塊內部使用。爲什麼case_class有兩個定義?

答案的作者說,這個「foo_immutable = Foo_immutable.new」的作品,使用相同的代碼和IRB 我得到

NameError: uninitialized constant Foo_inmutable 
from (irb):3 
from -e:1:in `load' 
from -e:1:in `<main>' 

爲什麼會發生呢?我應該如何初始化常量?

謝謝!

回答

0

首先,一個類是類Class的一個實例,Class繼承Module。例如:

class A 
end 

我們定義了一個類A,它是類,所以A是Class的一個實例。

由於A是Class的一個實例,因此它將獲取Class中的所有實例方法。而因爲Class繼承了Module,而Module有這個實例方法「case_class」,所以,A得到方法「case_class」。

我們可以像這樣調用:A.case_class。那爲什麼我們在Module中定義了「case_class」方法:爲了讓所有的類都有這個方法。其次,這兩個方法不需要有相同的名字,第二個調用第一個,通過self.class.case_class(name,superclass,& blk)。

+0

謝謝!你的解釋很棒 – user7519940