[rspec-users] class << self considered harmful... really?
matt at mattwynne.net
Tue Nov 25 11:54:31 EST 2008
On 25 Nov 2008, at 16:48, Pat Maddox wrote:
> "Zach Dennis" <zach.dennis at gmail.com> writes:
>> On Tue, Nov 25, 2008 at 11:08 AM, Mark Wilden <mark at mwilden.com>
>>> On Tue, Nov 25, 2008 at 5:41 AM, Matt Wynne <matt at mattwynne.net>
>>>> Sorry, I know this is off-topic, but I'd really like to know what
>>>> revered ruby-hackers who read this list think.
>>>> I have adopted class << self, partly from reading RSpec and
>>>> code as I learn Ruby. I personally think of class methods (or
>>>> 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.
>>> The nature of class methods in Ruby (as instance methods of the
>>> eigenclass) is for most purposes an implementation detail. It adds
>>> to understanding to open the eigenclass inside the class's
>>> definition in
>>> order to add class methods. It may save some typing, and it does
>>> help when
>>> searching (as David) says. Nevertheless, I regard the practice as
>>> a bit of
>>> an affection - 'look at me, ma, I'm opening the eigenclass!' - or
>>> as the
>>> imitation of an affection. It confuses newbies to no purpose, and
>>> everyone when 'class << self' has scrolled off the top of the
>> A lot of things confuse newbies. I don't think that's a very good
>> point for why you don't do something. #each confuses newbies, should
>> we also refrain from using that? Of course not.
>> Educating people so they understand why and when it should be avoided
>> is better then raising a fire alarm (unless it's really a fire).
>> Contrary to your statement though, I don't use class << self to feel
>> special, and my ma could care less about how I code. ;)
> I thought it was just that
> class << self
> def method1; end
> def methdod2; end
> def methdod3 end
> def methdod4; end
> becomes confusing as soon as those method definitions fill up a
> def self.method1 makes it instantly clear that it's a singleton
> That's what I do and why I do it, anyway.
Surely, as soon as they scroll off the screen, it's time to factor
that code off into a module or class of its own though?
It seems to me like whenever you have a lot of class methods on a
class, you've got a new class dying to get out. It's like class <<
self is like a little incubator for that new type!
Or Is that just me?
More information about the rspec-users