On Tue, Nov 25, 2008 at 9:38 AM, Zach Dennis <[EMAIL PROTECTED]> wrote: > On Tue, Nov 25, 2008 at 8:41 AM, Matt Wynne <[EMAIL PROTECTED]> wrote: >> Sorry, I know this is off-topic, but I'd really like to know what the >> revered ruby-hackers who read this list think. >> >> See >> http://ozmm.org/posts/class__self_is_harmful.html >> >> I have adopted class << self, partly from reading RSpec and Cucumber's code >> as I learn Ruby. I personally think of class methods (or 'static' methods) >> as being in a kind of 'holding pen' waiting to be factored off onto a proper >> class of their own, so I rather like the clear way you can group them in a >> 'nameless' metaclass ready for the exit door. >> >> I also really like the clarity of seeing the invisible metaclass for what it >> is. >> >> What do people think? How can this be harmful?
I forgot to add it is considered harmful because it can so easily be abused and make readability of the code very difficult to understand. Especially when doing meta-meta programming. :) > > I think the issue is that people are using class << self to access the > virtual class when they don't need it. I've seen code where you have > to scroll to see all of the methods implemented inside of class << > self. Adding methods to a virtual class does make method dispatching > in ruby less efficient, but I don't think enough to render it > non-usable. > > The virtual class of an object (class or instance alike) gives you the > ability to modify the object in ways that a simple class method > usually does not allow. For example, if you want to break down a class > method into a couple of methods, but you don't want to support all of > the methods as a public API. Here you can use class << self to > privately scope some of those helper methods that you just decomposed. > > My rule of thumb is to use it when I can't easily achieve the same > result using other mechanisms, but not to use it just cause'. > > -- > Zach Dennis > http://www.continuousthinking.com > http://www.mutuallyhuman.com > -- Zach Dennis http://www.continuousthinking.com http://www.mutuallyhuman.com _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users