Ross Bamford
1/22/2006 7:58:00 PM
On Mon, 2006-01-23 at 02:56 +0900, Gioele Barabucci wrote:
> 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).
>
Yes, I can see the logic in that, and I don't disagree that it'd
probably make sense in some respects, but now I've become more familiar
with Ruby I think I probably _would_ find it surprising if protected
methods worked that way. Things are often more simple (and elegant) than
you'd imagine I suppose...
> > Maybe try this workaround.
> >
> > info = Info.new(type_id)
> > info.instance_eval { self.length = len } ## <<< changed!
> 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 :)
Definitely :)
--
Ross Bamford - rosco@roscopeco.REMOVE.co.uk