我學習Ruby和我試圖找出什麼是以下定義的意思是:紅寶石模塊和類混亂
class Rectangle::Square < Shape
所以我知道廣場Shape的子類,但爲什麼範圍解析運算符? 這通常用於從ruby中的模塊訪問類和常量,但這裏有類定義,那麼它怎麼可能位於模塊內?謝謝。
我學習Ruby和我試圖找出什麼是以下定義的意思是:紅寶石模塊和類混亂
class Rectangle::Square < Shape
所以我知道廣場Shape的子類,但爲什麼範圍解析運算符? 這通常用於從ruby中的模塊訪問類和常量,但這裏有類定義,那麼它怎麼可能位於模塊內?謝謝。
此定義「打開」Rectangle
類/模塊並向其添加新類,Square
。這是
class Rectangle
class Square < Shape
end
end
我能想到的唯一的區別或多或少相當於是,如果沒有定義Rectangle
您的片段會失敗,這個片段不會。
這是一個同義詞
module Rectangle
class Square < Shape
end
end
誤導,因爲存在細微差異。 – 2012-07-18 19:05:52
除了代碼時沒有定義Rectangle
失敗,還有另外一個問題:
內class Rectangle
塊,你可以只參照其他類Square
。除此之外,您必須將其稱爲Rectangle::Square
。但是,如果將其定義爲class Rectangle::Square
,則必須將該類稱爲Rectangle::Square
。在Rectangle
中命名空間的所有其他類(和其他常量)也是如此。你經常看到這種模式的原因是代碼編寫者想要避免完全限定嵌套類。通常情況下,外部模塊(在這種情況下爲Rectangle
)包含一些需要彼此交互的類。
這是同樣的原因,你經常可以看到這樣的定義規格:
class Rectangle
describe Square
end
end
這樣,你可以只是做Square.new
一平方米來。如果它是describe Rectangle::Square
,那麼您將需要完全限定它並且執行Rectangle::Square.new
其他區別是不斷查找 – 2012-07-18 19:05:33