Ara.T.Howard / noaa.gov a ?crit :
> On Sun, 15 May 2005, Lionel Thiry wrote:
> 
>> Hello!
>>
>> ----8<----
>> a = Object.new
>>
>> b = class << a
>> class << self
>>  class << self
>>   class << self
>>    # "class << self".times(n)
>>     self
>>    # "end".times(n)
>>   end
>>  end
>> end
>> end
>> # => #<Class:#<Class:#<Class:#<Class:#<Object:0x2aa8348>>>>>
>> ----8<----
>>
>> How many levels can we reach? It seems there is no limit.
>>
>> I suppose those singleton_class exists only when needed? Otherwise, I
>> really
>> wonder where does ruby hide all those singleton_classes...
>>
>> But, sincerely, is it needed to have the singleton_class of a
>> singleton_class?
>> Isn't it a non-sense? Shouldn't this raise an error?
>>
>> ---8<---
>> a = Object.new
>>
>> begin
>> b = class << a
>>  class << self
>>   self
>>  end
>> end
>> rescue NewError
>> puts "Sincerely, you don't need the singleton_class of the
>> singleton_class!"
>> end
>> ---8<---
>>
>> What do you think of it? Isn't it worth an RCR?
> 
> 
> 
> i've found them useful in the following situation:
> 
>   harp:~ > cat a.rb
>   class C
>     class << self
>       class << self
>         def class_method_generator name
>           module_eval <<-code
>             def #{ name }; @#{ name }; end
>             alias #{ name }? #{ name }
>             def #{ name }= value; @#{ name } = value; end
>           code
>         end
>       end
>       %w( a b c ).each{|meth| class_method_generator meth}
>     end
>   end
> 
>   class B < C
>   end
> 
>   C.a = 42
>   p C.a
> 
>   B.a = 'forty-two'
>   p B.a
> 
>   C.class_method_generator :x
> 
> 
>   harp:~ > ruby a.rb
>   42
>   "forty-two"
>   a.rb:25: undefined method `class_method_generator' for C:Class
> (NoMethodError)
> 
> granted, you could do this with a private class method of C - but this
> is what
> singleton methods are for : defining a method on 'this' instance right here
> and right now that only that instance should be able to do.  in this
> case the
> instance happens to be a singleton of a singleton.
> 
> in any case i don't think one can say when/if that construct would be
> useful a
> priori and think that having that notion enforced by ruby itself ( __i__
> know
> when need a singleton class and __you__ don't ) is the kind of exception
> that
> reminds of of a 'p' language.  ruby programmers are continually pushing the
> boundries of oo coding precisely because matz has given them the tools
> to do
> so and it would be a shame to take a tool away just because someone hasn't
> figured out something indespesible to do with that particular tool __yet__.
> 
> kind regards.
> 
> -a

I just ask for opinions, you know... :(

What did make you so angry? The fact that I've thought it could be worth an RCR?

-- 
Lionel Thiry

Personal website: http://users.skynet.be/lthiry/