2012-07-18 111 views
0

我學習Ruby和我試圖找出什麼是以下定義的意思是:紅寶石模塊和類混亂

class Rectangle::Square < Shape 

所以我知道廣場Shape的子類,但爲什麼範圍解析運算符? 這通常用於從ruby中的模塊訪問類和常量,但這裏有類定義,那麼它怎麼可能位於模塊內?謝謝。

回答

0

此定義「打開」Rectangle類/模塊並向其添加新類,Square。這是

class Rectangle 
    class Square < Shape 
    end 
end 

我能想到的唯一的區別或多或少相當於是,如果沒有定義Rectangle您的片段會失敗,這個片段不會。

+1

其他區別是不斷查找 – 2012-07-18 19:05:33

-1

這是一個同義詞

module Rectangle 
    class Square < Shape 
    end 
end 
+1

誤導,因爲存在細微差異。 – 2012-07-18 19:05:52

0

除了代碼時沒有定義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