2010-08-16 47 views
16

我是Ruby的新手(經驗豐富的Python,C++和C)。我需要創建一個只能由模塊中的其他類和方法使用的類。在Python中,我只是將其稱爲__classname。我會在C++中使用一個空的typedef。我如何做到這一點在紅寶石(或我吠聲錯誤的樹,而不是這樣做「紅寶石的方式」?)Ruby模塊中的私有類(不是類方法)?

回答

4

我還沒有看到這樣的概念到目前爲止在Ruby中,但我想你可以模擬通過創建私有方法來返回創建爲局部變量的類(請記住,在Ruby中,類與其他任何對象一樣,可以在方法中實例化並由其返回)。

順便說一句,即使Ruby中的私有方法也不像其他語言中的私有方法那樣私密 - 您可以始終使用send方法訪問它們。但這樣做意味着你知道你在做什麼。

+0

該死。我認爲這是可能的,但我希望這不會是黑客......噢。猜猜我會找到更多的Ruby-ish方式來做到這一點。謝謝 - 你回答了我的問題。 – c4757p 2010-08-16 20:27:02

+0

你應該等待其他答案,我可能是錯的。順便說一下,你想用私人課程實現什麼?哦,另一件事:在Ruby中,實例變量總是_private_,爲了揭示它們,您需要創建訪問器方法,但沒有人認爲_hackish_。 :) – 2010-08-16 20:54:18

+0

其實我認爲這樣做/是/有點hackish - 這是我不喜歡關於Ruby的東西之一。另一個是愚蠢的隱式函數調用 - 我真的希望我可以通過名稱引用函數而不用調用它,而不使用符號或lambda。 我使用FFI動態連接外部庫,並且我想讓FFI C的結構遠離可用模塊。 – c4757p 2010-08-16 22:02:30

10

採取這一信息直接從this blog post,但由於紅寶石1.9.3,你可以使用private_constant一個模塊中創建一個私有類:

class Person 
    class Secret 
    def to_s 
     "1234vW74X&" 
    end 
    end 
    private_constant :Secret 

    def show_secret 
    Secret.new.to_s 
    end 
end