所有事情都是Ruby中的一個對象。所以如果我們有一個類Hello
這是一個父類Object
的實例。Ruby中的繼承
如果我在Ruby中的情況如下:
Hello = Class.new
World = Class.new(Hello)
這是否轉化爲以下?
class Hello
class World < Hello
由於多重繼承無法在Ruby中進行,該new
方法應該只有一個參數?
所有事情都是Ruby中的一個對象。所以如果我們有一個類Hello
這是一個父類Object
的實例。Ruby中的繼承
如果我在Ruby中的情況如下:
Hello = Class.new
World = Class.new(Hello)
這是否轉化爲以下?
class Hello
class World < Hello
由於多重繼承無法在Ruby中進行,該new
方法應該只有一個參數?
是的。對兩者都是正面的(除了你的後面的代碼是無效的)。
請注意,您的「Hello
它是父類Class
的一個實例。」是錯的。 Hello
是Class
的一個實例,但其父項不是Class
,它是Object
。
是的,沒有。是的,因爲就像你寫的那樣,最終會得到相同的結果(假設你會添加缺少的ends
)。不,因爲一般情況下的差異很小。內Class.new
定義什麼,你需要傳遞一個紅寶石塊,其中攜帶,並擁有完全訪問,它在被創建的上下文這樣:
value = :hello
Hello = Class.new do
define_method value do
value
end
end
Hello.new.hello #=> :hello
value = :world
Hello.new.hello #=> :world
注意,方法的名稱做了不變。但是,它返回的價值確實如此。這並不理想,並且爲什麼class Hello
在大多數情況下都是首選,以避免誤操作(與def
關鍵字相比優先於define_method
)。
這不會class
關鍵字的工作,因爲它不會產生紅寶石塊:類和常量
class Hello2
define_method value do
value
end
end
#=> undefined local variable or method `value`
還有一個有趣的事實是name
方法的行爲:
my_variable = Class.new
my_variable.name #=> nil
Hello = my_variable
my_variable.name #=> "Hello"
World = my_variable
my_variable.name #=> "Hello"
大部分事情在Ruby中是對象,但有很多例外。例子包括塊,'if'子句,不作爲方法實現的運算符,循環和變量(它們本身,而不是它們的值)。 –