2017-02-14 26 views
0

來自C#世界我習慣於認爲類是對象的不可變定義,並且每個對象都有固定的類。Ruby:提供真實世界的例子,當你打開對象本徵類並改變它時

我試圖打開我的腦海裏可能使用

class << some_object 
    def something_unique_to_this_object 
    # code 
    end 
end 

我不是在談論class << self的。
我在談論改變一個或幾個對象的類定義,但不是像class << self那樣。

在幾個月或幾乎一年的使用紅寶石,我從來沒有發現一種情況,當我認爲哦,我可以打開這個對象本徵類並改變它,並保持同一類的其他大多數對象不變。請提供真實世界的例子,當你使用這個。

+0

看來stackoverflow的algorythm認爲這是主觀的問題。不是。有很多像這樣的開放問題:http://stackoverflow.com/questions/1605774/real-world-use-of-binding-objects-in-ruby或http://stackoverflow.com/questions/1343619/php -real-world-oop-example –

+0

謝謝你發現那些不再是主題的舊問題,應該關閉並刪除! –

+0

還有很多。你爲什麼認爲他們不是話題? –

回答

2

你說「不喜歡class << self。那麼,猜一猜這種方式是如何實現的 - 類/模塊方法。語法上存在相似性的原因。類定義內的self是指類本身。您定義的任何類/模塊方法實際上是該類/模塊的特徵類的方法。您的特定班級只是班級Class的一個實例。


對於其他例子,看看類似rspec的東西。你將如何實現一個double並動態添加一些方法?你會如何存留一個現有對象的方法? Eingenclasses是一個簡單和完美的適合它。


除了更多元使用,我也有時覺得調試時很舒服。就像我可以放置一個斷點一樣,改變某個對象的行爲並在斷點後繼續看看會發生什麼。您可能不想影響該類的所有對象,或者該對象可能是匿名類的實例。

+0

第一段 - 我知道所有的東西,明確要求不要使用它。 :) RSpec就是很好的例子。我希望調試器的例子不那麼抽象,更具體一點,它會讓我更加開放。 Upvoting這個答案,希望更多。 –

+0

@MarkoAvlijaš,我不記得確切的調試用例。它與simple_form和匿名類的一個實例有關,它是另一個匿名類的子類(鏈接了幾次)。 – ndn