On Saturday 21 January 2006 01:46, Ross Bamford wrote:
> On Sat, 2006-01-21 at 04:34 +0900, Gioele Barabucci wrote:
> > Now I'm facing a problem. I use some static methods as "factory methods",
> > to create "prefilled" class instances. These methods can't access the
> > protected methods of the same class. Is this behavior intentional?
>
> I believe so. Because the class Info is itself an instance of Class, 
> while the instance is an instance of Info, which is entirely unrelated
> to Class (apart from the common ancestor, Object). So there's no reason
> for protected instance methods on Info to be available to methods on the
> class itself.
Instead it makes sense to me to be able to use Info protected methods from 
Info class methods. I see no need for 'Class' methods to be able to use 
protected members of an arbitrary class, but this is a particular case! Both 
methods are strictly related to Info (and its subclasses, but this is just a 
detail).

> (I think static methods are usually referred to as class methods in
> Ruby. *nothing* is static here).
Ah, my C++ heritage :)

> Maybe try this workaround.
>
>     info = Info.new(type_id)
>     info.instance_eval { self.length = len }  ## <<< changed!
>
> Hope that helps,
> Ross
Yes, it worked fine. Just I'm not so happy when I have to use *_eval :( I feel 
like cheating. Anyway it is better to have such a shortcut than not :)

--
Gioele <dev / gioelebarabucci.com>