"Bennett, Patrick" <Patrick.Bennett / inin.com> wrote in message
news:58A40B582A73F54AB5D8739C0678F3A802320696 / i3exchange.i3domain.inin.com..
..
> This is what I'd "like" to do:
> class A
>
>   def initialize()
>      @varInternalOnly = 'test'
>    end
>
>   def A.createSpecialA()
>       testObj = A.new
>       testObj.internalHelperMethod()

internalHelperMethod is an ``instance method'' not a Class method
(see below).  Also note quite generally that private methods can only
be invoked in the implicit receiver ( =  self ) form

          some_private_method(*args)

Note that even

         self.some_private_method(*args).

you will get you into trouble.   Anyway, as the short term fix you can
simply write

        testObj.send(:internalHelperMethod)

> #  [Fails because internalHelperMethod is private -
>  even though this is a class A method.  :\]
>       return testObj
>   end
>
> private
>     def internalHelperMethod()
>        @varInternalOnly = 'foo'
>     end
> end
>
>
> A.createSpecialA()
>
> I would like to have my singleton methods (like in C++) have access to
protected/private members of its own class.  Without this, it's not possible
to have static (singleton) class methods
> act as helpers (or in my case, alternative constructors) and access
'private' methods/variables of its own class type.  To me at least, this
reduces the usability of the access-control modifiers quite a bit.

Note that C++ static (class) method are  quite different to Ruby's class
methods
(disregarding the fact  that they share the same  name and mainly due to the
fact that in C++ does not have Class objects).  In C++  you can invoke
a class (== static)  method in the  receiver form

 SomeClass::class_meth(..)

or  instance form

 any_class_instance.class_meth(..)


Possible receivers of a Ruby class method

   def SomeClass.class_meth(..)
         # body
    end

(in Ruby terminology ``a singleton method of the Class instance
SomeClass'')  is the Class instance SomeClass itself or a Class
descendant of SomeClass.


/Christoph